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會話中的腳本導致了相同的錯誤。任何人都可以在這裏瞭解爲什麼會發生這種情況,以及我如何解決這個問題?我希望所有的處理過程對用戶不可見。任何幫助將大大讚賞。預先感謝您的時間。
奇怪的是一個64位的機器,有Office 2007的安裝就可以在測試這個文件,腳本工作。所以它似乎是2010年特有的東西。我希望其他人能夠遇到這種情況。 – user1389971 2012-07-19 16:11:12