Вопрос:

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

c# .net ms-word openxml

77600 просмотра

17 ответа

1345 Репутация автора

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

Автор: Schmidty Источник Размещён: 13.08.2008 10:07

Ответы (17)


49 плюса

11388 Репутация автора

Решение

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

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

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

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

Автор: rjzii Размещён: 13.08.2008 10:19

1 плюс

13777 Репутация автора

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

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

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

Автор: TheSmurf Размещён: 13.08.2008 10:21

1 плюс

17125 Репутация автора

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

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

Автор: Dale Ragan Размещён: 13.08.2008 10:34

4 плюса

10856 Репутация автора

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

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

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

Автор: Luke Girvin Размещён: 13.08.2008 11:21

10 плюса

3060 Репутация автора

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

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

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

Автор: DavidWhitney Размещён: 14.08.2008 02:43

10 плюса

18755 Репутация автора

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

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

Автор: John Размещён: 14.08.2008 02:57

3 плюса

3909 Репутация автора

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

Автор: DancesWithBamboo Размещён: 14.08.2008 03:03

2 плюса

2113 Репутация автора

В настоящее время я делаю именно эту вещь.

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

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

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

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

Автор: littlecharva Размещён: 15.09.2008 11:05

3 плюса

0 Репутация автора

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

Автор: Scott Размещён: 25.12.2008 09:51

3 плюса

2146 Репутация автора

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

Автор: Jafin Размещён: 09.04.2009 04:07

14 плюса

0 Репутация автора

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

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

Автор: Eric Flamm Размещён: 20.05.2009 01:40

7 плюса

81 Репутация автора

Для создания документов 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 .

Автор: Marcello Belguardi Размещён: 01.12.2009 10:50

17 плюса

6945 Репутация автора

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

Автор: MadBoy Размещён: 22.07.2010 03:07

3 плюса

1583 Репутация автора

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

Автор: Eric White Размещён: 12.05.2011 03:50

1 плюс

23165 Репутация автора

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

Автор: plaes Размещён: 14.11.2011 09:56

0 плюса

9529 Репутация автора

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

Автор: David Thielen Размещён: 06.06.2012 10:37

1 плюс

315 Репутация автора

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

Автор: Ricardo Размещён: 27.12.2012 07:08
32x32