我有一系列Word文档链接到不再存在的模板。这会给尝试打开它们的用户带来问题。我可以获取文档列表,遍历每个文档,并将tempalte设置为null。虽然这样可以解决问题,但在更改之前我无法确定模板是什么。
如果模板在打开时不可用,Word将使用Normal.dot(x)替换附加的模板。但是,我正在尝试查找的模板位于文档的Tempaltes对话框中。 AttachedTempalte()和get_AttachedTemplate()。当我知道有问题的文档在单词的“模板”对话框中列出了不同的模板时,名称返回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似乎没有帮助。我还注意到interop和VBA不使用相同的wdDialog。 PS使用wdDialogToolsTemplates和VBA使用wdDialogsToolsTemplates。我用以下
检查了PS中的组件[Reflection.Assembly]::LoadWithPartialName("Microsoft.Office.Interop.Word") | out-null
[Enum]::GetNames("Microsoft.Office.Interop.Word.WdDialogs")
并确认正确的选项是wdDialogToolsTemplates。
答案 0 :(得分:0)
在powershell中,您必须使用[]括号指定类型,然后使用::来指定类型成员,因此您的第3行PowerShell代码应如下所示:
$word.Dialogs([Microsoft.Office.Interop.Word.WdWordDialog]::wdDialogToolsTemplates).Template()
请参阅以下有关powershell枚举的博文:Jeffrey Snover或Richard Siddaway。
答案 1 :(得分:0)
我正在尝试做类似的事情,主要目的不是在Word文档中存储任何代码。
<强>的PowerShell 强>
我在PowerShell路线上取得了一些进展,但我找不到从对话框中提取路径的方法。
$objWord = New-Object -ComObject "Word.Application"
$objWord.Visible = $True
$objDoc = $objWord.Documents.Open("C:\path\to\document.doc")
$objToolsTemplates = $objWord.Dialogs.Item([Microsoft.Office.Interop.Word.WdWordDialog]::wdDialogToolsTemplates)
$objDocStats = $objWord.Dialogs.Item([Microsoft.Office.Interop.Word.WdWordDialog]::wdDialogDocumentStatistics)
现在$objToolsTemplates.Show()
和$objToolsTemplates.Show()
都会导致GUI显示包含原始(不可用)模板路径的对话框,但我无法找到以编程方式提取该信息的任何方法。根据{{3}},两个对话框都应具有Template
属性。
<强>的VBScript 强>
最后我不得不选择VBS。以下代码将为您提供原始(不可用)模板的路径。它至少仍然是一个剧本。
Option Explicit
Const wdDialogToolsTemplates = 87
Const wdDoNotSaveChanges = 0
Dim objWordApp
Dim objDoc
Dim dlgTemplate
Set objWordApp = CreateObject("Word.Application")
objWordApp.Visible = False
Set objDoc = objWordApp.Documents.Open("C:\path\to\document.doc")
Set dlgTemplate = objWordApp.Dialogs(wdDialogToolsTemplates)
Wscript.Echo dlgTemplate.Template
objDoc.Close(wdDoNotSaveChanges)
objWordApp.Quit