Используя Word COM объекты в .NET, InlineShapes не копируются из шаблона в документ - PullRequest
0 голосов
/ 26 марта 2010

Использование .NET и Word Interop Я программно создаю новый документ Word из файла шаблона (.dot). Есть несколько способов сделать это, но я решил использовать свойство AttachedTemplate, как таковое:

Dim oWord As New Word.Application()  
oWord.Visible = False  

Dim oDocuments As Word.Documents = oWord.Documents  

Dim oDoc As Word.Document = oDocuments.Add()  
oDoc.AttachedTemplate = sTemplatePath  
oDoc.UpdateStyles()  

(я выбираю метод AttachedTemplate для этого над методом Documents.Add () из-за проблемы утечки памяти , которую я обнаружил при использовании Documents.Add () для открытия из шаблонов .)

Это прекрасно работает, ЗА ИСКЛЮЧЕНИЕМ, когда в нижнем колонтитуле шаблона есть изображение (представленное как InlineShape). В этом случае изображение не появляется в результирующем документе. В частности, изображение должно отображаться в коллекции oDoc.Sections.Item (1) .ooters.Item (WdHeaderFooterIndex.wdHeaderFooterPrimary). Это не проблема при использовании Documents.Add (), однако, как я уже говорил, метод для меня не вариант.

Есть ли дополнительный шаг, который я должен предпринять, чтобы получить изображения из шаблона? Я уже обнаружил, что при использовании AttachedTemplate мне приходится явно вызывать UpdateStyles () (как вы можете видеть в моем фрагменте кода), чтобы применить стили шаблона к документу, тогда как это делается автоматически при использовании Documents.Add (). Или, может быть, есть какой-то сумасшедший обходной путь? Ваша помощь очень ценится! :)

1 Ответ

0 голосов
/ 27 марта 2010

При установке только свойства AttachedTemplate ваш вновь созданный документ не будет наследовать никакого содержимого из шаблона вообще. Вы получите только стили и автотексты, определенные в шаблоне, и получите доступ к макросам VBA, определенным в этом шаблоне.

Чтобы действительно создать документ на основе шаблона, вам нужно (как вы уже описали его) передать шаблон в качестве параметра методу Add().

Не могли бы вы описать, как это приводит к утечке памяти, как вы обнаружили утечку и как эта утечка памяти влияет на ваше приложение? Было бы лучше исправить эту проблему (если это действительно утечка) вместо использования обходного пути.

...