3

我正在尝试编写一个 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 会话中执行脚本会导致相同的错误。任何人都知道为什么会发生这种情况,以及我该如何解决?我希望所有处理都对用户不可见。任何帮助将不胜感激。提前感谢您的宝贵时间。

4

1 回答 1

4

我认为您想使用$doc.close()而不是 关闭文档$objWord.Documents.Close()

于 2012-11-02T22:10:26.280 回答