




Ответ будет немного зависеть от того, работает ли приложение на сервере или на клиентской машине. Если вы работаете на сервере, вам может потребоваться использовать один из форматов создания офиса на основе XML, поскольку при использование Office Automation на сервере возникают известные проблемы.
Однако, если вы работаете на клиентском компьютере, у вас есть выбор либо с помощью автоматизации делопроизводства, либо использование формата Office Open XML (см. Ссылки ниже), который поддерживается Microsoft Office 2000 и выше либо изначально, либо с помощью пакетов обновления. Один из недостатков этого подхода заключается в том, что вы, возможно, не сможете встроить некоторые виды графиков или изображений, которые хотите показать.
Наилучший способ решения проблем будет напрямую зависеть от того, сколько времени у вас есть на разработку. Если вы идете по пути автоматизации Office, есть немало хороших руководств, которые можно найти через Google, и их довольно просто изучить. Однако формат Open Office XML является довольно новым, поэтому вы можете найти кривую обучения немного выше.
Информация об Office Open XML
Обновление от 9/2011 ... Я использую и Interop, и OpenXml, и, столкнувшись с этой задачей, в любом случае я бы обязательно использовал OpenXml. Это единственное решение, которое абсолютно гарантирует, что у вас будет полный контроль над выводом.
@ Дейл Раган: Это будет работать с форматом XML Office 2003, но не переносимым (как, скажем, файлы .doc или .docx).
Чтобы читать / записывать их, вам необходимо использовать элемент управления ActiveX библиотеки объектов Word:
@Danny Smurf: На самом деле эта статья описывает то, что станет форматом Office Open XML, на который ответил Роб. Я буду уделять больше внимания ссылкам, которые я публикую, чтобы убедиться, что они не устарели. Я действительно провел поиск в WordML, как он тогда назывался.
Я считаю, что формат Office Open XML - лучший вариант.
Шмидти, если вы хотите создавать документы Word на веб-сервере, вам потребуется лицензия для каждого клиент (а не только для веб-сервера). См. Этот раздел в первом сообщении Роба связь:
«Помимо технических проблем, вы также должны учитывать вопросы лицензирования. Текущие руководящие принципы лицензирования запрещают использование приложений Office на сервере для обслуживания клиентских запросов, если только эти клиенты сами не имеют лицензионных копий Office. Использование серверной автоматизации для обеспечения функциональности Office для Лицензионное соглашение с конечным пользователем (EULA) не распространяется на нелицензированные рабочие станции ».
Если вы соответствуете лицензионным требованиям, я думаю, вам нужно будет использовать COM-взаимодействие, а точнее, Основные сборки взаимодействия Office XP.
Вы рассматривали возможность использования .RTF в качестве альтернативы?
Он поддерживает встраивание изображений и таблиц, а также текста, открывается по умолчанию с помощью Microsoft Word, и хотя его набор функций более ограничен (не считая любого расширенного форматирования) для чего-то, что выглядит и ощущается и открывается как документ Word, это не за горами.
Ваши конечные пользователи, вероятно, этого не заметят.
Пожалуйста, не используйте RTF - спецификация беспорядочная, даже Microsoft не следует ей полностью, и в ней много двусмысленности.
Я обнаружил, что Задавать слова является лучшим, поскольку не все могут открывать файлы формата Office Open XML / *. Docx, а взаимодействие Word и автоматизация Word могут содержать ошибки. Aspose Words поддерживает большинство типов файлов документов, начиная с Word 97.
Это платный компонент, но он имеет отличную поддержку. Другой альтернативой, как уже было предложено, является RTF.
Я обнаружил, что Aspose Words немного не хватает при работе с документами OpenXml. В частности, его обработка элементов управления содержимым почти бесполезна, и он вообще не может обрабатывать узлы AltChunk.
Ознакомьтесь с VSTO (Инструменты Visual Studio для Office). Довольно просто создать шаблон Word, вставить в него остров данных xml, а затем отправить его клиенту. Когда пользователь открывает документ в Word, Word считывает XML-файл, преобразует его в WordML и отображает. Вы захотите взглянуть на класс ServerDocument библиотеки VSTO. По моему опыту, никаких дополнительных лицензий не требуется.
Сейчас я делаю именно это.
Если документ не очень большой, не содержит изображений и т.п., я сохраняю его как 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 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
Я провел последнюю неделю или около того, изучая 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:
Добавьте ссылку на сборку Microsoft.Office.Interop.Word в свой проект. Путь - \ Visual Studio Tools для Office \ PIA \ Office11 \ Microsoft.Office.Interop.Word.dll.
Следуйте примеру кода Microsoft вы можете найти здесь: http://support.microsoft.com/kb/316384/en-us.
Бесплатная библиотека DocX для создания документов DocX, активно разрабатываемых и очень простых и интуитивно понятных в использовании. Поскольку CodePlex умирает, проект переместился на github.
Я написал серия сообщений в блоге о создании документов Open XML WordprocessingML. Мой подход заключается в том, что вы создаете шаблон документа, который содержит элементы управления содержимым, и в каждом элементе управления содержимым вы пишете выражение XPath, которое определяет, как извлекать содержимое из XML-документа, содержащего данные, управляющие процессом создания документа. Код бесплатный и распространяется под лицензией Взаимная лицензия Microsoft (Ms-RL). В той же серии сообщений в блоге я также исследую подход, при котором вы пишете код C# в элементах управления содержимым. Затем процесс создания документа обрабатывает шаблон документа и генерирует программу C#, которая генерирует желаемые документы. Одним из преимуществ этого подхода является то, что вы можете использовать источник данных любой в качестве источника данных для процесса создания документа. Этот код также распространяется по взаимной лицензии Microsoft.
LibreOffice также поддерживает безгласное взаимодействие через API. К сожалению, на данный момент информации об этой функции мало .. :(
Другая альтернатива - Наветренный Докген (отказ от ответственности - я основатель). С Windward вы создаете шаблон в Word, включая изображения, таблицы, графики, датчики и все остальное, что захотите. Вы можете установить теги, в которые вставляются данные из источника данных XML или SQL (включая такие функции, как циклы forEach, импорт и т. д.). А затем сгенерируйте отчет в форматах DOCX, PDF, HTML и т. д.
К вашему сведению, когда я захожу на сайт коммерческого продукта, и мне кажется, что они скрывают цену, рекламируя бесплатный доступ, я автоматически предполагаю, что продукт действительно дорогой, а бесплатная пробная версия - просто приманка. Если Docgen безумно дорогой, то вы, вероятно, правы, скрывая цену, но в остальном я думаю, что это ошибка.
@SteveHiner - У нас есть диапазоны цен (поиск по цене), но мы сократили прайс-лист, потому что значительную часть времени люди неправильно понимали, что им нужно, а затем чувствовали себя введенными в заблуждение. Таким образом, мы понимаем, что лучше понять чьи-то потребности и затем дать им правильную цену.
@SteveHiner - Вы были правы. После того, как многие люди пожаловались, мы подняли цены на сайте и пытаемся объяснить это достаточно хорошо, чтобы они понимали, что это будет для них.
Вы также можете использовать генератор документов Word. Его можно использовать для развертывания на стороне клиента или на стороне сервера. Из описания проекта:
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
Это следует снова открыть. Он не только ясен и полезен, но и связан с другими вопросами, которые помечены как дублирующие.