Вопрос

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

Это было полезно?

Решение

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

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

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

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

Другие советы

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

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

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

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

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

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

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

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

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

  1. Добавить Microsoft.Office.Interop.Word ссылка на сборку вашего проекта.Путь \Инструменты Visual Studio для Office\PIA\Office11\Microsoft.Office.Interop.Word.dll.

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

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

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

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

Ознакомьтесь с VSTO (инструменты Visual Studio для 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, для .net есть несколько хороших библиотек RTF, например http://www.codeproject.com/KB/string/nrtftree.aspx

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

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

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

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

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

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

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

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

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

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

@Дэнни Смурф:На самом деле эта статья описывает то, что станет форматом 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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top