Как можно создать документ Word на C#?

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

Ответов (17)

Решение

Ответ будет немного зависеть от того, работает ли приложение на сервере или на клиентской машине. Если вы работаете на сервере, вам может понадобиться один из форматов создания офиса на основе XML, поскольку при использовании Office Automation на сервере возникают известные проблемы .

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

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

Информация об Office Open XML

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

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

Вы также можете использовать генератор документов 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

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

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

@ Дейл Раган: Это будет работать с форматом XML Office 2003, но не переносимым (как, скажем, файлы .doc или .docx).

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

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

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

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

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

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

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

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

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

It supports embedding images and tables as well as text, opens by default using Microsoft Word and whilst it's featureset is more limited (count out any advanced formatting) for something that looks and feels and opens like a Word document it's not far off.

Your end users probably won't notice.

Сейчас я делаю именно это.

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

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

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

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

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

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

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

Однако не уверен в импорте изображений. На их странице рекламы http://www.syncfusion.com/products/DocIO/Backoffice/features/default.aspx говорится

Blockquote Essential DocIO поддерживает вставку в документ как скалярных, так и векторных изображений практически во всех форматах. Bitmap, gif, png и tiff - вот некоторые из распространенных поддерживаемых типов изображений.

Так что об этом стоит подумать.

Как уже упоминалось, вы можете создать документ RTF, есть несколько хороших библиотек RTF для .net, например http://www.codeproject.com/KB/string/nrtftree.aspx

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

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

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

  1. Добавьте в проект ссылку на сборку Microsoft.Office.Interop.Word . Путь: \ Visual Studio Tools for Office \ PIA \ Office11 \ Microsoft.Office.Interop.Word.dll .

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

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

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