Вопрос по .net, ms-word, openxml, c# – Как можно создать документ Word в C #? [закрыто]

73

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

Это должно быть повторно открыто. Он не только понятен и полезен, но и связан с другими вопросами, которые помечены как дублирующие. DarenW

Ваш Ответ

17   ответов
3

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

14

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

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

49

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

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

Наилучший способ добиться успеха будет зависеть от того, сколько времени вы потратите на развитие. Если вы пойдете по пути автоматизации Office, есть довольно много хороших учебников, которые можно найти через 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 Introducing the Office (2007) Open XML File Formats - http://msdn.microsoft.com/en-us/library/aa338205.aspx
Обновление от 9/2011 ... Я выполняю Interop и OpenXml, и в любом случае, столкнувшись с этой задачей, я бы абсолютно использовал OpenXml. Это единственное решение, которое абсолютно гарантирует, что вы будете иметь абсолютный контроль над выходом.
10

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

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

Пожалуйста, не используйте RTF - спецификация является беспорядком, даже Microsoft не полностью ее соблюдает, и в ней много неясности.
1

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

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

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

7

ET, особенно в C # или VB.NET:

Add the Microsoft.Office.Interop.Word assembly reference to your project. The path is \Visual Studio Tools for Office\PIA\Office11\Microsoft.Office.Interop.Word.dll.

Follow the Microsoft code example you can find here: http://support.microsoft.com/kb/316384/en-us.

3

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

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

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

Blockquote Essential DocIO has support for inserting both Scalar and Vector images into the document, in almost all formats. Bitmap, gif, png and tiff are some of the common image types supported.

Так что стоит задуматься.

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

3

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

10

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

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

Я обнаружил, что при работе с документами OpenXml Aspose Words немного не хватает. В частности, его обработка элементов управления содержимым практически бесполезна, и он вообще не может обрабатывать узлы AltChunk.
4

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

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

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

2

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

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

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

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

1

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

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

3

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

1

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

17

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

0

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

@SteveHiner - у нас есть ценовые диапазоны (поиск по цене), но мы сняли прайс-лист, потому что значительный процент времени люди не понимали, что им нужно, а затем чувствовали себя обманутыми. Таким образом, мы придумали, что лучше понять чьи-то потребности, а затем дать им правильную цену.
@ SteveHiner - Вы были правы. После того, как многие жаловались, мы поднимаем цены на сайте и пытаемся объяснить это достаточно хорошо, чтобы понять, что это будет для них.
К вашему сведению, когда я захожу на сайт с коммерческим продуктом, и кажется, что они скрывают цену, рассказывая о том, что есть бесплатный след, я автоматически предполагаю, что продукт действительно дорогой, а бесплатная пробная версия - просто приманка. Если Docgen очень дорогой, то вы, вероятно, правы, чтобы скрыть цену, но в противном случае я думаю, что это ошибка.
1

льзовать для развертывания на стороне клиента или на стороне сервера. Из описания проекта:

WordDocumentGenerator is an utility to generate Word documents from templates using Visual Studio 2010 and Open XML 2.0 SDK. WordDocumentGenerator helps generate Word documents both non-refresh-able as well as refresh-able based on predefined templates using minimum code changes. Content controls are used as placeholders for document generation. It supports Word 2007 and Word 2010.

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

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

Похожие вопросы