2012-07-19 77 views
2

我正在嘗試編寫PowerShell腳本來執行多個Word文檔上的步驟。我在我的機器上安裝了Word 2010,但似乎無法獲得腳本來打開文檔。這裏是腳本PowerShell - 處理多個Word文檔(Office 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#示例顯示向documents.open傳遞了「ReadOnly:False」參數。單步執行ISE調試器中的腳本,我可以看到$ wd.fullname在那裏並指向一個有效的文件,所以我完全不清楚它爲什麼不打開。起初,我認爲這是因爲我使用的是64位版本的操作系統(32位版本的Office),但是嘗試32位PowerShell會話中的腳本導致了相同的錯誤。任何人都可以在這裏瞭解爲什麼會發生這種情況,以及我如何解決這個問題?我希望所有的處理過程對用戶不可見。任何幫助將大大讚賞。預先感謝您的時間。

+0

奇怪的是一個64位的機器,有Office 2007的安裝就可以在測試這個文件,腳本工作。所以它似乎是2010年特有的東西。我希望其他人能夠遇到這種情況。 – user1389971 2012-07-19 16:11:12

回答

3

我想你想關閉使用$doc.close()代替$objWord.Documents.Close()