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

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

13.08.2008 22:07:45
Это должно быть повторно открыто. Он не только понятен и полезен, но и связан с другими вопросами, которые помечены как дублирующие.
DarenW 17.08.2016 07:19:20
17 ОТВЕТОВ
РЕШЕНИЕ

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

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

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

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

49
25.08.2009 05:23:37
Обновление от 9/2011 ... Я занимаюсь Interop и OpenXml, и в любом случае, столкнувшись с этой задачей, я бы абсолютно использовал OpenXml. Это единственное решение, которое абсолютно гарантирует, что вы будете иметь полный контроль над выходом.
Chris B. Behrens 13.09.2011 14:30:06

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

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

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

1
13.08.2008 22:21:07

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

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

1
13.08.2008 22:34:09

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

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

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

4
13.08.2008 23:21:17

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

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

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

10
14.08.2008 14:43:18
Пожалуйста, не используйте RTF - спецификация является беспорядком, даже Microsoft не полностью ее соблюдает, и в ней много неясности.
David Thielen 6.06.2012 22:17:53

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

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

10
3.02.2010 20:42:38
Я обнаружил, что Aspose Words немного не хватает при работе с документами OpenXml. В частности, его обработка элементов управления содержимым практически бесполезна, и он вообще не может обрабатывать узлы AltChunk.
Collin K 25.10.2011 20:36:39

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

3
14.08.2008 15:03:28

Я сейчас занимаюсь именно этим.

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

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

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

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

2
15.09.2008 11:05:14

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

3
3.02.2010 20:39:45

У меня был хороший успех, используя 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

3
9.04.2009 04:07:49

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

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

14
3.02.2010 20:38:01

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

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

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

7
3.02.2010 20:34:31

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

17
27.04.2017 15:49:44

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

3
12.05.2011 03:50:12

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

1
14.11.2011 09:56:50

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

0
9.11.2019 21:21:22
К вашему сведению, когда я захожу на сайт с коммерческим продуктом, и кажется, что они скрывают цену, рекламируя, что есть бесплатный след, я автоматически предполагаю, что продукт действительно дорогой, а бесплатная пробная версия - просто приманка. Если Докген безумно дорог, тогда вы, вероятно, правы, чтобы скрыть цену, но в противном случае я думаю, что это ошибка.
Steve Hiner 27.01.2017 15:38:38
@SteveHiner - у нас есть ценовые диапазоны (поиск по цене), но мы сняли прайс-лист, потому что значительный процент времени люди не понимали, что им нужно, а затем чувствовали себя обманутыми. Таким образом, мы понимаем, что лучше понять чьи-то потребности, а затем дать им правильную цену.
David Thielen 28.01.2017 23:24:35
@ SteveHiner - Вы были правы. После того, как многие жаловались, мы поднимаем цены на сайте и пытаемся объяснить это достаточно хорошо, чтобы понять, что это будет для них.
David Thielen 8.02.2019 21:05:43

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

1
27.12.2012 19:08:10