在.NET中使用Word COM对象时,InlineShapes不会从模板复制到文档

时间:2010-03-26 20:58:49

标签: .net com interop ms-word office-interop

使用.NET和Word Interop我以编程方式从模板(.dot)文件创建新的Word文档。有几种方法可以做到这一点,但我选择使用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()从模板打开时发现memory leak issue。)

当模板页脚中有图像(表示为InlineShape)时,此工作正常。在这种情况下,图像不会出现在结果文档中。具体来说,图像应出现在 oDoc.Sections.Item(1).Footers.Item(WdHeaderFooterIndex.wdHeaderFooterPrimary).Range.InlineShapes 集合中,但它不会出现。

使用Documents.Add()时这不是问题,但正如我所说,该方法不适合我。

我需要采取额外步骤才能从模板中获取图像吗?我已经发现在使用AttachedTemplate时我必须显式调用UpdateStyles()(正如你在我的代码片段中看到的)将模板样式应用于文档,而这在使用Documents.Add()时自动完成。或者也许有一些疯狂的解决方法?非常感谢您的帮助! :)

1 个答案:

答案 0 :(得分:0)

仅设置AttachedTemplate属性时,新创建的文档根本不会继承模板中的任何内容。您将只获取模板中定义的样式和自动缩放,并可以访问该模板中定义的VBA宏。

要真正根据您需要的模板创建文档(如您所述),将模板作为参数传递给Add()方法。

您能描述一下这是如何导致内存泄漏,您是如何检测到泄漏的,以及此内存泄漏会对您的应用程序产生何种影响?最好解决这个问题(如果真的是泄漏),而不是使用解决方法。