У меня есть проект, в котором я бы хотел создать экспорт отчета в формате MS Word. Отчет будет содержать изображения/графики, таблицы и текст. Каков наилучший способ сделать это? Сторонние инструменты? Каковы ваши впечатления?
Как документ Word может быть создан на С#?
Ответ 1
Ответ будет немного зависеть от того, работает ли приложение на сервере или работает ли оно на клиентской машине. Если вы работаете на сервере, тогда вам захочется использовать один из форматов генерации офисных приложений на основе XML, поскольку существуют проблемы с информацией, если с помощью Office Automation или с использованием формата Office Open XML ( см. ссылки ниже), который поддерживается Microsoft Office 2000 и либо изначально, либо через пакеты обновления. Один из них обращает внимание на это, хотя вы не можете вставлять некоторые виды графиков или изображений, которые вы хотите показать.
Лучший способ обойти все будет зависеть от того, сколько времени вам нужно инвестировать в развитие. Если вы идете по маршруту Office Automation, существует немало хороших учебных пособий, которые можно найти через Google, и их достаточно просто изучить. Однако формат Open Office XML является довольно новым, поэтому вы можете найти, что кривая обучения будет немного выше.
Office Open XML Iinformation
- Office Open XML - http://en.wikipedia.org/wiki/Office_Open_XML
- OpenXML Developer - http://openxmldeveloper.org/default.aspx
- Знакомство с форматами файлов Open XML Office (2007) - http://msdn.microsoft.com/en-us/library/aa338205.aspx
Ответ 2
DocX free library для создания документов DocX, активно разрабатываемых и очень простых и интуитивно понятных в использовании. Поскольку CodePlex умирает, проект переместился на github.
Ответ 3
Самый быстрый способ, которым я это делал в прошлом, - использовать XML. Вот хорошая статья, которая должна вас начать:
Ответ 4
Я провел последнюю неделю или около того, чтобы ускориться на Office Open XML. У нас есть приложение базы данных, в котором хранятся данные опроса, которые мы хотим сообщить в Microsoft Word. Фактически вы можете создавать файлы Word 2007 (docx) с нуля на С#. Open XML SDK версии 2 включает классное приложение под названием Document Reflector, которое фактически предоставит код С# для полного воссоздания документа Word. Вы можете использовать части или весь код и заменять биты, которые вы хотите изменить "на лету". В файле справки, включенном в SDK, есть также хорошие примеры кода.
Нет необходимости в Office Interop или любом другом программном обеспечении Office на сервере - новые форматы - это 100% XML.
Ответ 5
Рассматривали ли вы использование .RTF в качестве альтернативы?
Он поддерживает встраивание изображений и таблиц, а также текст, который открывается по умолчанию с использованием Microsoft Word, и хотя его набор возможностей более ограничен (подсчитывает любое предварительное форматирование) для чего-то, что выглядит и чувствует и открывается, как документ Word, он не за горами,
Конечные пользователи, вероятно, не заметят.
Ответ 6
Я нашел Aspose Words, чтобы быть лучшим, поскольку не все могут открывать файлы формата Office Open XML/*. docx и Word interop и автоматизация Word может быть ошибкой. Aspose Words поддерживает большинство типов файлов документов из Word 97 вверх.
Это компонент оплаты, но имеет большую поддержку. Другой альтернативой, как уже было предложено, является RTF.
Ответ 7
Чтобы сгенерировать документы Word с помощью Office Automation в .NET, в частности на С# или VB.NET:
-
Добавьте ссылку на Microsoft.Office.Interop.Word для вашего проекта. Путь \Visual Studio Tools for Office\PIA\Office11\Microsoft.Office.Interop.Word.dll.
-
Следуйте примеру кода Microsoft вы можете найти здесь: http://support.microsoft.com/kb/316384/en-us.
Ответ 8
Шмидти, если вы хотите создавать документы Word на веб-сервере, вам понадобится лицензия для каждого клиента (а не только для веб-сервера). См. Этот раздел в первой ссылка Роб опубликовал:
"Помимо технических проблем, вы также должны учитывать проблемы лицензирования. Существующие правила лицензирования не позволяют приложениям Office использоваться на сервере для обслуживания клиентских запросов, если только сами клиенты не имеют лицензионных копий Office. Использование серверной автоматизации для предоставления Функциональность Office для нелицензированных рабочих станций не распространяется на Лицензионное соглашение с конечным пользователем (EULA).
Если вы отвечаете требованиям лицензирования, я думаю, вам нужно будет использовать COM Interop - чтобы быть конкретным, Office XP Primary Interop Assemblies.
Ответ 9
Проверьте VSTO (Visual Studio Tools for Office). Достаточно просто создать шаблон Word, вставить в него XML-объект данных, а затем отправить его клиенту. Когда пользователь открывает документ в Word, Word читает xml и преобразует его в WordML и отображает его. Вы захотите посмотреть класс ServerDocument библиотеки VSTO. Никакого дополнительного лицензирования не требуется из моего опыта.
Ответ 10
Я столкнулся с этой проблемой и создал для этого небольшую библиотеку. Он использовался в нескольких проектах, и я решил его опубликовать. Это бесплатно и очень просто, но я уверен, что это поможет вам справиться с этой задачей. Вызовите библиотеку Office Open XML, http://invoke.co.nz/products/docx.aspx.
Ответ 11
У меня был хороший успех, используя Syncfusion Backoffice DocIO, который поддерживает форматы doc и docx.
В предыдущих выпусках он не поддерживал все в слове, но в соответствии с вашим списком мы тестировали его с помощью таблиц и текста в качестве метода слияния, и он работал нормально.
Не уверен, что импорт изображений. На странице своей рекламы http://www.syncfusion.com/products/DocIO/Backoffice/features/default.aspx говорится
Blockquote Essential DocIO поддерживает вставку как скалярных, так и векторных изображений в документ практически во всех форматах. Растровые изображения, gif, png и tiff - некоторые из распространенных типов изображений.
Поэтому стоит подумать.
Как уже упоминалось, вы можете создать RTF-документ, есть несколько хороших библиотек RTF для .net, например http://www.codeproject.com/KB/string/nrtftree.aspx
Ответ 12
Я написал aa серию блога блога об открытии документа XML WordprocessingML. Мой подход заключается в том, что вы создаете документ шаблона, содержащий элементы управления содержимым, и в каждом элементе управления содержимым вы пишете выражение XPath, которое определяет способ извлечения содержимого из XML-документа, который содержит данные, которые приводят процесс генерации документа. Код является бесплатным и лицензируется в соответствии с Microsoft Reciprocal License (Ms-RL). В той же серии сообщений блога я также исследую подход, в котором вы пишете код С# в элементах управления содержимым. Затем процесс генерации документа обрабатывает документ шаблона и генерирует программу на С#, которая генерирует нужные документы. Одним из преимуществ этого подхода является то, что вы можете использовать любой источник данных в качестве источника данных для процесса создания документа. Этот код также лицензируется в соответствии с Microsoft Reciprocal License.
Ответ 13
В настоящее время я делаю это точно.
Если документ не очень большой, он не содержит изображений и т.д., я сохраняю его как RTF С# MergeFields # в нем и просто заменяю его содержимым, отправляя результат пользователю в виде RTF.
Для больших документов, включая изображения и динамически вставленные изображения, я сохраняю исходный документ Word как файл единой веб-страницы *.mht, содержащий # MergeFields # еще раз. Затем я делаю то же, что и выше. Используя это, я могу легко визуализировать DataTable с помощью некоторых основных тегов таблицы Html и заменить один из # MergeFields # на всю таблицу.
Изображения могут быть сохранены на вашем сервере, а URL-адрес встроен в документ.
Интересно, что новые форматы файлов Office 2007 на самом деле являются zip файлами - если вы переименуете расширение в .zip, вы можете открыть их и посмотреть их содержимое. Это означает, что вы должны иметь возможность переключать контент, например изображения, с помощью простой библиотеки С#.
Ответ 14
@Dale Ragan: Это будет работать для формата Office 2003 XML, но это не переносимые (как, скажем, файлы .doc или .docx).
Чтобы прочитать/записать их, вам необходимо использовать элемент управления ActiveX библиотеки объектов Word:
Ответ 15
@Danny Smurf: На самом деле в этой статье описывается, каким будет формат Office Open XML, на который ответил Роб. Я буду уделять больше внимания ссылкам, которые я публикую сейчас, чтобы убедиться, что они не устарели. Я на самом деле сделал поиск в WordML, что и было вызвано в то время.
Я считаю, что формат Office Open XML - лучший способ пойти.
Ответ 16
LibreOffice также поддерживает безгласное взаимодействие через API. К сожалению, в настоящее время информации об этой функции пока мало.: (
Ответ 17
Вы также можете использовать генератор документов Word. Он может использоваться для развертывания на стороне клиента или на стороне сервера. Из описания проекта:
WordDocumentGenerator - это утилита для создания документов Word из шаблонов с использованием Visual Studio 2010 и SDK Open XML 2.0. WordDocumentGenerator помогает создавать документы Word как не обновляемый, а также обновляемый на основе предопределенных шаблонов используя минимальные изменения кода. Элементы управления содержимым используются как заполнители для создания документов. Он поддерживает Word 2007 и Word 2010.
Захватите его: http://worddocgenerator.codeplex.com/
Загрузить SDK: http://www.microsoft.com/en-us/download/details.aspx?id=5124
Ответ 18
Другой альтернативой является Windward Docgen (отказ от ответственности - я основатель). С Windward вы создаете шаблон в Word, включая изображения, таблицы, графики, датчики и все остальное, что хотите. Вы можете установить теги, в которые вставлены данные из источника данных XML или SQL (включая такие функции, как forEach loop, import и т.д.). А затем сгенерируйте отчет в DOCX, PDF, HTML и т.д.