У меня есть проект, в котором я хотел бы создать экспорт отчета в формате MS Word. Отчет будет включать изображения/графики, таблицы и текст. Каков наилучший способ сделать это? Сторонние инструменты? Каков ваш опыт?
Ответ будет немного зависеть от того, работает ли приложение на сервере или на клиентской машине. Если вы работаете на сервере, то вам лучше использовать один из форматов генерации офисных файлов на основе XML, поскольку существуют известные проблемы при использовании Office Automation на сервере.
Однако если вы работаете на клиентской машине, то у вас есть выбор: либо использовать Office Automation, либо использовать формат Office Open XML (см. ссылки ниже), который поддерживается Microsoft Office 2000 и выше либо изначально, либо через пакеты обновления. Недостатком этого формата является то, что вы не сможете вставить некоторые виды графиков или изображений, которые вы хотите показать.
Выбор лучшего способа будет зависеть от того, сколько времени вы готовы потратить на разработку. Если вы пойдете по пути автоматизации Office Automation, есть довольно много хороших учебников, которые можно найти через Google, и их довольно просто освоить. Однако формат Open Office XML является довольно новым, поэтому кривая обучения может оказаться немного сложнее.
Office Open XML Информация
DocX свободная библиотека для создания документов DocX, активно разработанных и очень легких и интуитивных, чтобы использовать. Так как CodePlex умирает, проект двинулся в GitHub.
Я провел прошлую неделю или таким образом входя в курс дела на Офис Открытый XML. У нас есть приложение базы данных, которое хранит данные исследования, о которых мы хотим сообщить в Microsoft Word. Вы можете на самом деле создать Word 2007 (docx) файлы с нуля в C#. Открытая версия 2 XML SDK включает прохладное применение, названное Отражателем Документа, который на самом деле предоставит кодекс C#, чтобы полностью воссоздать документ Word. Вы можете использовать части или весь кодекс, и заменить битами, которые Вы хотите изменить на лету. У справочного файла, включенного с SDK, есть некоторые хорошие кодовые образцы также.
Нет никакой потребности в Офисе Interop или любого другого программного обеспечения Office на сервере - новые форматы - 100%-й XML.
Вы рассмотрели использование.RTF как альтернативы?
Это поддерживает объемлющие изображения и таблицы, а также текст, открывается дефолтом, используя Microsoft Word и пока it' s featureset более ограничен (высчитайте любое передовое форматирование) для чего-то, что смотрит и чувствует и открывается как документ Word it' s не далеко.
Ваши конечные пользователи, вероятно, won' t уведомление.
Я нашел что Слова Aspose являются лучшими как не, все могут открыть Офис, Открытый XML / *.docx файлы формата и Word interop и автоматизация Word может быть детской коляской. Слова Aspose поддерживают большинство типов файлов документа из Word 97 вверх.
Это - плата - для компонента, но имеет большую поддержку. Другая альтернатива, как уже предложено - RTF.
Произвести документы Word с Автоматизацией работы офиса в.NET, конкретно в C# или VB.NET:
Добавьте Microsoft. Офис. Interop. Word ссылка собрания на Ваш проект. Путь - \Visual Инструменты Студии для Office\PIA\Office11\Microsoft. Офис. Interop. Word.dll .
Последуйте кодовому примеру Microsoft Вы можете найти здесь: http://support.microsoft.com/kb/316384/en-us.
Schmidty, если Вы хотите произвести документы Word о веб-сервере, Вам будет нужна лицензия на каждого клиент (не только веб-сервер). Посмотрите этот раздел в первом [связь] (http://support.microsoft.com/kb/257757), Роб отправил:
" Помимо технических проблем, Вы должны также рассмотреть лицензирование проблем. Текущие рекомендации по лицензированию препятствуют тому, чтобы Офисные приложения использовались на сервере обслуживать запросы клиента, если те клиенты сами не лицензировали копии Офиса. Используя Автоматизацию стороны сервера, чтобы предоставить Офисную функциональность нелицензированным автоматизированным рабочим местам не охвачен Лицензионным соглашением с конечным пользователем (EULA)."
Если Вы отвечаете требованиям лицензирования, я думаю, что Вы должны будете использовать COM Interop - чтобы быть конкретными, [Офис Предварительные выборы XP Ассамблеи Interop] (http://msdn.microsoft.com/en-us/library/aa163987.aspx).
Я столкнулся с этой проблемой и создал небольшую библиотеку для этого. Это использовалось в нескольких проектах, и затем я решил издать его. Это свободно и очень очень просто, но I' m уверенный это поможет с Вами с задачей. Призовите Офис Открытая Библиотека XML, http://invoke.co.nz/products/docx.aspx.
Проверьте VSTO (Визуальные Инструменты Студии для Офиса). Довольно просто создать шаблон Word, ввести остров XML-данных в него, затем послать его клиенту. Когда пользователь открывает доктора в Word, Word читает xml и преобразовывает его в WordML и отдает его. Вы захотите посмотреть на класс ServerDocument библиотеки VSTO. Никакое дополнительное лицензирование не требуется от моего опыта.
Я имел хороший успех, используя Вспомогательный офис Syncfusion DocIO, который поддерживает форматы docx и доктор.
В предшествующих выпусках это не поддерживало все в слове, но accoriding к Вашему списку, мы проверили его с таблицами и текстом как подход составления стандартных писем и это хорошо работало.
Не уверенный в импорте изображений все же. На их странице рекламы http://www.syncfusion.com/products/DocIO/Backoffice/features/default.aspx это говорит
Blockquote У существенного DocIO есть поддержка вставки и изображения Скаляра и Вектора в документ почти во всех форматах. Битовый массив, gif, png и размолвка - некоторые общие поддержанные типы изображения.
Так его достойное рассмотрения.
Поскольку другие упомянули, что Вы можете создать документ RTF, есть некоторые хорошие библиотеки RTF вокруг для .net как http://www.codeproject.com/KB/string/nrtftree.aspx
I' ve, письменный ряд сообщения в блоге на Открытой генерации документов XML WordprocessingML. Мой подход состоит в том, что Вы создаете документ шаблона, который содержит средства управления содержанием, и в каждом довольном контроль Вы пишете выражение XPath, которое определяет, как восстановить содержание из документа XML, который содержит данные, которые стимулируют процесс генерации документов. Кодекс бесплатный, и лицензируется под Microsoft Reciprocal License (г-жа-RL). В том же самом ряду сообщения в блоге я также исследую подход, где Вы пишете кодекс C# в довольном средства управления. Процесс генерации документов тогда обрабатывает документ шаблона и производит программу C#, которая производит желаемые документы. Одно преимущество этого подхода состоит в том, что Вы можете использовать любой источник данных как источник данных для процесса генерации документов. Тот кодекс также лицензируется под Microsoft Reciprocal License.
Я в настоящее время делаю эту точную вещь.
Если документ isn' t очень большой, doesn' t содержат изображения и такой, тогда я храню его как RTF с #MergeFields# в нем и просто заменяю их содержанием, посылая результат вниз пользователю как RTF.
Для больших документов, включая изображения и динамично вставленные изображения, я сохраняю первоначальный документ Word как Единственную Интернет-страницу *.mht файл, содержащий #MergeFields# снова. Я тогда делаю то же как выше. Используя это, я могу легко отдать DataTable с некоторыми основными признаками стола HTML и заменить один из #MergeFields# с целым столом.
Изображения могут быть сохранены на Вашем сервере и URL, включенном в документ также.
Интересно, новые Офисные 2007 форматы файлов - на самом деле zip-файлы - если Вы переименовываете расширение к .zip, Вы можете открыть их и видеть их содержание. Это означает, что Вам необходимо переключить содержание, такое как изображения в и пользование простой библиотекой почтового индекса C#.
@Danny Smurf: Вообще-то эта статья описывает то, что станет форматом Office Open XML, на который ответил Роб. Теперь я буду уделять больше внимания ссылкам, которые размещаю, чтобы убедиться, что они не устарели. Я действительно провел поиск по WordML, так он назывался в то время.
Я считаю, что формат Office Open XML - это лучший путь.
@Dale Ragan: Это будет работать для формата Office 2003 XML, но он не переносится (как, скажем, файлы .doc или .docx).
Для чтения/записи таких файлов вам придется использовать элемент управления Word Object Library ActiveX:
Вы могли также использовать генератор документа Word. Это может использоваться для развертывания стороны сервера или клиентского. Из описания проекта:
WordDocumentGenerator - полезность, чтобы произвести документы Word от шаблоны используя Визуальную Студию 2010 и Открытый 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
LibreOffice также поддерживает безголовое взаимодействие через API. К сожалению, there' s в настоящее время не много информации об этой особенности все же..: (
Другая альтернатива - Наветренный Docgen (правовая оговорка - I' m основатель). Со Встречным направлением ветра Вы проектируете шаблон в Word, включая изображения, столы, графы, меры и что-либо еще, что Вы хотите. Вы можете установить признаки, где данные из XML или SQL datasource вставлены (включая функциональность как forEach петли, импорт, и т.д.). И затем произведите отчет DOCX, PDF, HTML, и т.д.