Раньше я не пользовался никакими сторонними инструментами, так как я когда-либо писал только приложения автоматизации 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