Программно генерировать редактируемые документы Word из ASP.NET? - PullRequest
1 голос
/ 25 июня 2010

Цель состоит в том, чтобы создать документы предложения, которые можно отредактировать вручную в Word после факта, но перед отправкой их клиентам.

Большая часть содержимого предложения будет извлечена из существующего содержимого веб-сайта HTML (с поддержкой CMS), а также из некоторого пользовательского (не HTML) внедрения для определенных сценариев. Конечно, условная логика могла бы войти в серверную часть ASP.NET, чтобы соответствующим образом изменить содержимое.

Я открыт для сторонних инструментов, если грубые манипуляции с Word API трудны. На самом деле хорошим сторонним инструментом может быть ответ.

Ответы [ 5 ]

3 голосов
/ 25 июня 2010

Раньше я не пользовался никакими сторонними инструментами, так как я когда-либо писал только приложения автоматизации Office для ПК, на которых уже установлен Office.

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

Вот несколько вещей, которые могут вам пригодиться:

Именованные и необязательные аргументы
С объектной моделью Word довольно легко работать. Раньше с VB.NET было проще работать, чем с C: поскольку API автоматизации Office изначально создавались с учетом VB, можно было использовать дополнительные параметры. В более ранних версиях C # вам приходилось указывать каждый аргумент в вызовах API, что было довольно утомительно. Я понимаю, что это изменилось в Visual C # 2010:

Как: использовать именованные и необязательные аргументы в программировании Office (Руководство по программированию в C #) http://msdn.microsoft.com/en-us/library/dd264738.aspx

Обучение
Я нашел эти уроки довольно удобными:

Автоматизация офисных программ с помощью VB.NET
http://www.xtremevbtalk.com/showthread.php?t=160433

Часто задаваемые вопросы по VB.NET Office Automation
http://www.xtremevbtalk.com/showthread.php?t=160459

Понимание объектной модели Word с точки зрения разработчика .NET
http://msdn.microsoft.com/en-us/library/aa192495%28office.11%29.aspx

Раннее и позднее связывание
Стоит упомянуть один момент: обычно рекомендуется позднее связывание, но оно может быть очень полезным, если вы не знаете, какая версия Office будет развернута на хосте приложения. Раннее связывание работает быстрее и обладает преимуществом intellisense в вашей среде IDE:

Использование раннего и позднего связывания в автоматизации
http://support.microsoft.com/kb/245115

Раннее или позднее связывание
http://word.mvps.org/faqs/interdev/earlyvslatebinding.htm

Поиск и замена
Следует помнить, что объекты find и replace могут работать не так, как вы ожидаете. Вместо поиска по всему документу, он ищет только основной текст. Если у вас есть текстовые фреймы в документе, они будут игнорироваться. Вместо этого вы должны пройти через все StoryRanges и искать содержимое каждого. Вот что я делаю в VB.NET для поиска основной текстовой статьи и текстовых фреймов:

Private Sub FindReplaceAll(ByVal objDoc As Object, ByVal strFind As String, ByVal strReplacement As String)
    Dim rngStory As Object

    For Each rngStory In objDoc.StoryRanges
        Do
            If rngStory.StoryType = wdMainTextStory Or rngStory.StoryType = wdTextFrameStory Then
                With rngStory.Find
                    .Text = strFind
                    .Replacement.Text = strReplacement
                    .Wrap = wdFindContinue
                    .Execute(Replace:=wdReplaceAll)
                End With
            End If
            rngStory = rngStory.NextStoryRange
        Loop Until rngStory Is Nothing
    Next rngStory
End Sub

Объект коллекции StoryRanges
http://msdn.microsoft.com/en-us/library/bb178940%28office.12%29.aspx

3 голосов
/ 25 июня 2010

Используйте компонент Aspose Words для .Net.

Ссылка на компонент Aspose Words

Компонент изначально распознает формат файла Microsoft Word без необходимости устанавливать какие-либо продукты Microsoft Office в своей прикладной среде.Затем вы можете начать с существующего шаблона Word или программно создать весь документ Microsoft Word с нуля.Затем объектная модель Word позволяет вам экспортировать в doc / docx и т. Д. И сохранять как собственный файл Word в любое удобное для вас место.

На их веб-сайте настроено множество демонстраций.

2 голосов
/ 15 сентября 2015

У меня долгая история создания документов и слияния.В старые времена мы широко использовали Office COM даже в серверных (ASP) приложениях.За многие годы мы узнали, что этот подход вызывает много проблем, и сегодня я всегда выступаю против использования Office COM (автоматизации Word) практически в любом сценарии.

С введением Microsoft Open XML SDK нам удалось создатьнадежный компонент слияния, который был во много раз быстрее и надежнее, чем решения с Office COM.По моему опыту, Open XML SDK позволяет разработчику создать надежное решение, но для того, чтобы сделать его полезным и надежным, требуется много усилий и времени.

На рынке имеется несколько хороших библиотек для генерации / обработки документов.Позже мы закончили тем, что купили его, и, по моему мнению, создание собственного решения (на основе Open XML SDK или Office COM) просто никогда не окупится.

В настоящее время мы используем Docentric Toolkit , который являетсяуниверсальная библиотека для обработки документов и еще лучший набор инструментов на основе шаблонов / mail-merge для .NET.Он позволяет создавать шаблоны в MS Word, а затем заполнять их данными приложения и создавать окончательные документы в различных форматах.

1 голос
/ 26 июня 2010

Вы можете использовать XSL для генерации WordML.

Эта техника определенно запутана, но дает вам много возможностей в макете.

0 голосов
/ 24 июля 2015

Вам не нужны какие-либо сторонние элементы управления для создания документа Word.С 2007 года и далее Word может читать html как документ Word.Вы просто сохраняете любую веб-страницу с расширением " .doc ", и Word разберется с ней.

Просто создайте свою веб-страницу с любым форматированием, а затем сохраните ее с расширением .doc..

Я использовал HttpWebRequest для вызова URL (с параметрами) для моей страницы, затем использовал WebResponse и Stream, чтобы получить мою страницу в буфер, затем StreamReader и StreamWriter для сохраненияэто фактический документ.Затем у меня есть своя собственная функция загрузки файла.

Если кто-то захочет, чтобы мой код сообщил мне,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...