Как можно создать документ Word на C#? [закрытый]

У меня есть проект, в котором я хотел бы создать экспорт отчета в формате MS Word. Отчет будет включать изображения/графики, таблицы и текст. Как лучше всего это сделать? Сторонние инструменты? Каковы ваши впечатления?

17 ответов


ответ будет немного зависеть от того, работает ли приложение на сервере или на клиентском компьютере. Если вы работаете на сервере, то вы хотите использовать один из форматов генерации office на основе XML, так как есть проблемы, когда использование автоматизации Office на сервере.

однако, если вы работаете на клиентской машине, у вас есть выбор либо использование автоматизации Office или использование Office Open Формат XML (см. ссылки ниже), который поддерживается Microsoft Office 2000 и выше либо изначально, либо через пакеты обновления. Один из недостатков этого заключается в том, что вы не можете встроить некоторые виды графиков или изображений, которые вы хотите показать.

лучший способ сделать все будет зависеть от того, сколько времени вы должны инвестировать в развитие. Если вы идете по пути автоматизации Office, есть довольно много хороших учебников, которые можно найти через Google и довольно просто учиться. Однако формат Open Office XML является довольно новым, поэтому кривая обучения может оказаться немного выше.

Office Open XML Iinformation


DocX бесплатная библиотека для создания документов DocX, активно разработанных и очень простых и интуитивно понятных в использовании. Поскольку CodePlex умирает, проект переместился в github.


Я провел последнюю неделю или около того, набирая скорость на Office Open XML. У нас есть приложение базы данных, которое хранит данные опроса, которые мы хотим сообщить в Microsoft Word. Фактически вы можете создавать файлы Word 2007 (docx) с нуля в C#. Пакет SDK Open XML версии 2 включает классное приложение, называемое отражателем документа, которое фактически предоставляет код C# для полного воссоздания документа Word. Вы можете использовать части или весь код и заменить нужные биты изменения на лету. Файл справки, включенный в SDK, также имеет несколько хороших образцов кода.

нет необходимости в Office Interop или любом другом офисном программном обеспечении на сервере-новые форматы 100% XML.


вы рассматривали использование .RTF в качестве альтернативы?

Он поддерживает встраивание изображений и таблиц, а также текста, открывается по умолчанию с помощью Microsoft Word, и в то время как featureset более ограничен (отсчет любого расширенного форматирования) для чего-то, что выглядит и чувствует и открывается как документ Word, это не далеко.

конечные пользователи, вероятно, не заметите.


Я нашел Aspose Слова чтобы быть лучшим, так как не все могут открыть Office Open XML/*.файлы формата docx и Word interop и Word automation могут быть багги. Aspose Words поддерживает большинство типов файлов документов от Word 97 и выше.

это платный компонент, но имеет большую поддержку. Другой альтернативой, как уже предлагалось, является RTF.


для создания документов Word с помощью Office Automation в .NET, в частности в C# или VB.NET:

  1. добавить Microsoft.Офис.Взаимодействие.Слово ссылка на сборку в проект. Путь \Visual Studio Tools for Office\PIA\Office11\Microsoft.Офис.Взаимодействие.Слово.dll файлы.

  2. следуйте примеру кода Microsoft вы можете найти здесь: http://support.microsoft.com/kb/316384/en-us.


Шмидти, если вы хотите создавать документы Word на веб-сервере вам понадобится лицензия для каждого клиент (не только веб-сервер). См. Этот раздел в первом ссылке Роб добавлено:

" помимо технических проблем, вы также должны рассмотреть вопросы лицензирования. Действующие правила лицензирования запрещают использование приложений Office на сервере для обслуживания запросов клиентов, если только эти клиенты сами не имеют лицензионных копий Office. С помощью серверная автоматизация для предоставления функций Office нелицензированным рабочим станциям не охватывается Лицензионным соглашением с конечным пользователем (EULA)."

Если вы соответствуете лицензионным требованиям, я думаю, вам нужно использовать com-взаимодействия - в частности,основные сборки взаимодействия Office XP.


Проверьте VSTO (Visual Studio Tools for Office). Довольно просто создать шаблон Word, ввести в него остров данных xml, а затем отправить его клиенту. Когда пользователь открывает документ в Word, Word считывает xml и преобразует его в WordML и отображает его. Вы захотите посмотреть класс ServerDocument библиотеки VSTO. Мой опыт не требует дополнительного лицензирования.


У меня был хороший успех, используя Syncfusion Backoffice DocIO, который поддерживает форматы doc и docx.

в предыдущих выпусках он не поддерживал все в word, но в соответствии с вашим списком мы протестировали его с таблицами и текстом как подход слияния почты, и он работал нормально.

Не уверен в импорте изображений, хотя. На своей странице в аннотации 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


Я столкнулся с этой проблемой и создал для этого небольшую библиотеку. Он использовался в нескольких проектах, а затем я решил опубликовать его. Это бесплатно и очень очень просто, но я уверен, что это поможет вам с задачей. Вызовите библиотеку Office Open XML,http://invoke.co.nz/products/docx.aspx.


Я написал серия сообщений в блоге на Open XML WordprocessingML document generation. Мой подход заключается в том, что вы создаете документ шаблона, содержащий элементы управления содержимым, и в каждом элементе управления содержимым вы пишете выражение XPath, которое определяет, как извлечь содержимое из XML-документа, содержащего данные, которые управляют процессом создания документа. Код является бесплатным и лицензируется в соответствии с Microsoft взаимная лицензия (Ms-RL). В том же серия сообщений в блоге, я также изучаю подход, при котором вы пишете код C# в элементах управления контентом. Затем процесс создания документа обрабатывает документ шаблона и генерирует программу на C#, которая генерирует нужные документы. Одним из преимуществ этого подхода является то, что вы можете использовать любой источник данных как источник данных для процесса создания документа. Этот код также лицензируется по взаимной лицензии Microsoft.


в настоящее время я делаю это точно.

Если документ не очень большой, не содержит изображений и тому подобное, то я сохраняю его как RTF с #MergeFields# в нем и просто заменяю их содержимым, отправляя результат пользователю как RTF.

для больших документов, включая изображения и динамически вставленные изображения, я сохраняю исходный документ Word как одну веб-страницу *.MHT файл, содержащий #MergeFields# снова. Тогда я делаю то же самое, что и выше. Используя это, я можно легко отобразить DataTable с некоторыми основными тегами таблицы Html и заменить одно из #MergeFields# всей таблицей.

изображения могут быть сохранены на вашем сервере и url, встроенный в документ тоже.

интересно, что новые форматы файлов Office 2007 На самом деле являются zip-файлами-если вы переименуете расширение.zip вы можете открыть их и увидеть их содержимое. Это означает, что вы должны иметь возможность переключать контент, например изображения, с помощью простого c# zip библиотека.


@Dale Ragan: это будет работать для формата Office 2003 XML, но это не переносимо (как, скажем,.doc или .docx файлы будут).

чтобы прочитать / записать их, вам нужно использовать элемент управления ActiveX библиотеки объектов Word:

http://www.codeproject.com/KB/aspnet/wordapplication.aspx


@Danny Smurf: на самом деле эта статья описывает, что станет форматом Office Open XML, на который ответил Роб. Я буду уделять больше внимания ссылкам, которые я публикую сейчас, чтобы убедиться, что они не устарели. Я действительно сделал поиск по WordML, который в то время назывался.

Я считаю, что формат Office Open XML-лучший способ пойти.


LibreOffice также поддерживает безголовое взаимодействие через API. К сожалению, в настоящее время об этой функции пока мало информации.. :(


вы также можете использовать генератор документов Word. Его можно использовать для развертывания на стороне клиента или сервера. Из описания проекта:

WordDocumentGenerator-это утилита для создания документов Word из шаблоны с использованием Visual Studio 2010 и Open XML 2.0 SDK. WordDocumentGenerator помогает создавать документы Word как не обновляемый а также обновляемый на основе предопределенных шаблонов использование минимальных изменений кода. Элементы управления содержимым используются как подстановки для генерации документов. Он поддерживает Word 2007 и Word 2010.

Хватай:http://worddocgenerator.codeplex.com/

скачать SDK:http://www.microsoft.com/en-us/download/details.aspx?id=5124


Другой альтернативой является Наветренный Docgen (отказ от ответственности-я основатель). С Windward вы разрабатываете шаблон в Word, включая изображения, таблицы, графики, датчики и все остальное, что вы хотите. Вы можете установить теги, в которые вставляются данные из источника данных XML или SQL (включая такие функции, как циклы forEach, импорт и т. д.). А затем сгенерируйте отчет в DOCX, PDF, HTML и т. д.