我有一系列链接到不再存在的模板的 Word 文档。这给试图打开它们的用户带来了问题。我可以获取文档列表,遍历每个文档,并将模板设置为空。虽然这将解决问题,但在更改模板之前我无法确定模板是什么。
如果模板在打开时不可用,Word 将用 Normal.dot(x) 替换附加的模板。但是,我尝试查找的模板位于文档的“模板”对话框中。AttachedTempalte() 和 get_AttachedTemplate().Name 当我知道有问题的文档在 word 的“模板”对话框中列出了不同的模板时,都会返回 Normal.dot。
我可以在 VBA 中访问它,在 PS 中无法做到这一点令人沮丧。谁能看到我在哪里搞砸了?
$word = new-object -comobject "Word.Application"
$doc = $word.Documents.Open({document path})
$word.Dialogs(Microsoft.Office.Interop.Word.WdWordDialog.wdDialogToolsTemplates).Template()
回报:
Missing ')' in method call.
At :line:1 char:15
+ $word.Dialogs(M <<<< icrosoft.Office.Interop.Word.WdWordDialog.wdDialogToolsTemplates).Template()
工作VBA:
Dim doc as Word.Document
Dim strTemplate as String
Set doc = Documents.Open(Filename:=filename, Visible:=False)
doc.Activate
strTemplate = Word.Dialogs(wdDialogsToolsTemplates).Template
之后我可以看到我应该在 strTemplate 中看到的模板名称和路径。
我检查了 ps 脚本并添加 $doc.Activate 似乎没有帮助。我还注意到互操作和 VBA 不使用相同的 wdDialog。PS 使用 wdDialogToolsTemplates,而 VBA 使用 wdDialogsToolsTemplates。我用以下内容检查了 PS 中的程序集
[Reflection.Assembly]::LoadWithPartialName("Microsoft.Office.Interop.Word") | out-null
[Enum]::GetNames("Microsoft.Office.Interop.Word.WdDialogs")
并确认正确的选项是 wdDialogToolsTemplates。