Откройте XML-файл Microsoft в Open XML 2.0 и добавьте переменные данные. - PullRequest
2 голосов
/ 14 января 2011

Мы унаследовали тонну кода, написанного на C # в .NET 2.0 в Visual Studio 2005. Внутренняя база данных - MS SQL Server 2000. Мы перенесли код в C # в .NET 4.0 в Visual Studio 2010 и можем компилировать и строить. Проблема заключается в том, что старый код использовал библиотеку Microsoft.Interop.Office.Word, чтобы позволить нам генерировать отчеты на стороне сервера с использованием шаблонов слияния и макросов. Теперь мы понимаем, что Visual Studio 2010 не поддерживает работу приложений VBA или C # MS Word на стороне сервера. Итак, мы скачали Open XML 2.0. Документация вне досягаемости. И множество публикаций, которые мы находим в Интернете, говорят о создании документов с нуля, мало о слиянии почты или запуске включенных макросов в файлах .dotm и т. Д., И большинство из них имеют дело с Open XML 1.0.

Могу ли я преобразовать файл .dotx в файл .xml в MS Word, а затем просто использовать C # и API Open XML, чтобы загрузить этот файл .xml и внедрить переменные данные, извлеченные из базы данных? Кажется абсолютно безумным создание динамического XML-файла EXISTING (то есть 30-страничного отчета) в коде при каждом запуске отчета. Я что-то упустил?

Если кто-то успешно это сделал, и пример с кодом на C # был бы действительно полезен. Спасибо, Emily

1 Ответ

2 голосов
/ 20 января 2011

Вы можете попробовать действительно очень простой метод поиска / замены.

  1. Создайте свой шаблон в виде файла .docx и сохраните его на сервере
  2. Измените все ваши почтовые слиянияполя с легким нахождением и анализом заполнителей, которые не появятся в документе в обычном режиме и не требуют кодировки XML.Например: {{FirstName}}.
  3. Создать новый пустой файл .docx (zip) для каждого документа, который вы хотите сгенерировать
  4. Считать каждый файл из файла шаблона .docx
  5. Когда вы читаете исходный файл, найдите и замените ваши токены соответствующим образом
  6. Отправьте файл клиенту

Я сам не работал с WordML, поэтому не знаюесли есть ошибки, которые могут помешать вышеописанному, но, исходя из моего понимания Open XML и использования SpreadsheetML, все должно работать.

Работа с OpenXML сложнее, чем Office Interop.API Office Interop был намного ближе к пользовательскому интерфейсу Office и, таким образом, знаком и прост в использовании.Open XML API - очень легкая оболочка для основного XML и почти такая же, как работа с XML напрямую.Сложнее без такого же автоматического знакомства.

Однако OpenXML на намного лучше офисного взаимодействия.Взаимодействие с офисом никогда не было безопасным для использования сервером.Думайте об этом как о хорошем времени, чтобы избавиться от вашей старой бомбы замедленного действия.

...