我正在尝试编写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会话尝试脚本会导致同样的错误。任何人都有任何见解,为什么会发生这种情况,以及我如何解决它?我希望所有处理对用户来说都是不可见的。任何帮助都将非常赞赏。提前谢谢您的时间。
答案 0 :(得分:3)
我认为您要使用$doc.close()
代替$objWord.Documents.Close()