我正在尝试编写一个 PowerShell 脚本来对多个 Word 文档执行步骤。我的机器上安装了 Word 2010,但似乎无法获取打开文档的脚本。这是脚本
$path = "C:\MyPath"
Add-Type -AssemblyName Microsoft.Office.Interop.Word
$wordFiles = Get-ChildItem -Path $path -include *.doc, *.docx -recurse
$objWord = New-Object -ComObject "word.application"
$objWord.visible = $false
foreach($wd in $wordFiles)
{
$doc = $objWord.documents.open($wd.fullname)
#InsertProcessingFunctionsHere
$doc.Save()
$objWord.Documents.Close()
}
$objWord.Quit()
我尝试运行它,我从 PowerShell 得到的错误是:
Exception calling "Open" with "1" argument(s): "Command failed"
At C:\Scripts\Process-WordDocs.ps1:10 char:31
+ $doc = $objWord.documents.open <<<< ($wd.fullname)
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : ComMethodTargetInvocation
You cannot call a method on a null-valued expression.
At C:\Scripts\Process-WordDocs.ps1:13 char:10
+ $doc.Save <<<< ()
+ CategoryInfo : InvalidOperation: (Save:String) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
Exception calling "Close" with "0" argument(s): "This method or property is not available because a document window is not active."
At C:\Scripts\Process-WordDocs.ps1:14 char:25
+ $objWord.Documents.Close <<<< ()
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : ComMethodTargetInvocation
MSDN 声明documents.open 只需要1 个参数,其余的都是可选的。但是,我在网上看到的一个 C# 示例显示将“ReadOnly: False”参数传递给documents.open。单步执行 ISE 调试器中的脚本,我可以看到 $wd.fullname 在那里并指向一个有效文件,所以我完全不清楚它为什么没有打开。起初,我认为这是因为我使用的是 64 位版本的操作系统(32 位版本的 Office),但尝试从 32 位 PowerShell 会话中执行脚本会导致相同的错误。任何人都知道为什么会发生这种情况,以及我该如何解决?我希望所有处理都对用户不可见。任何帮助将不胜感激。提前感谢您的宝贵时间。