PowerShell - 处理多个单词文档(office 2010)

时间:2012-07-19 14:55:14

标签: powershell powershell-v2.0 word-2010

我正在尝试编写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会话尝试脚本会导致同样的错误。任何人都有任何见解,为什么会发生这种情况,以及我如何解决它?我希望所有处理对用户来说都是不可见的。任何帮助都将非常赞赏。提前谢谢您的时间。

1 个答案:

答案 0 :(得分:3)

我认为您要使用$doc.close()代替$objWord.Documents.Close()

关闭文档