使用.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()时自动完成。或者也许有一些疯狂的解决方法?非常感谢您的帮助! :)
答案 0 :(得分:0)
仅设置AttachedTemplate
属性时,新创建的文档根本不会继承模板中的任何内容。您将只获取模板中定义的样式和自动缩放,并可以访问该模板中定义的VBA宏。
要真正根据您需要的模板创建文档(如您所述),将模板作为参数传递给Add()
方法。
您能描述一下这是如何导致内存泄漏,您是如何检测到泄漏的,以及此内存泄漏会对您的应用程序产生何种影响?最好解决这个问题(如果真的是泄漏),而不是使用解决方法。