2016-10-19 71 views
0

我創建了一個函數打開一個.docx文件:如何在不更改Powershell類型的情況下返回對象?

Function OpenWordDoc($Filename) 

{ 
    $objWord = New-Object -comobject Word.Application 
    $objWord.Visible = $True; 
    $objWord.Documents.Open($Filename) 
    $objSelection = $objWord.Selection 
    Return $objSelection; 
} 

我打電話這樣說:

$doc=OpenWordDoc -Filename "C:\Users\$UserName\Desktop\test.docx"; 

現在我想調用的方法$doc.TypeText("test")添加一些文字,但這種只有當我運行腳本而沒有通過製作函數的步驟時纔有效。 我注意到,在我Return $ObjSelection;並將它保存在$doc,$doc ist是不一樣的ObjectType。這就是爲什麼我不能再調用這個方法。

如何將$doc設置爲與$ObjSelection完全相同,而不使其具有全局性?

+0

'返回$ objSelection' - >',$ objSelection' – PetSerAl

+0

@PetSerAl這不會改變任何事情。 – Paxz

回答

0

你是不是實際上看到正在改變的返回類型;你所看到的是PowerShell最常見的陷阱之一。事實上,您已經遇到了我在Simple-Talk.com上的文章A Plethora of PowerShell Pitfalls中描述的陷阱#1。我鼓勵你先去那裏 - 陷阱以測驗形式呈現 - 讓你在答案被揭示之前思考問題的可能性。我會等。

好吧,如果您仔細閱讀了文章,您現在知道PowerShell從函數返回「內容」的靈活性是什麼讓您在這裏絆倒。具體來說,行$objWord.Documents.Open($Filename)發送輸出到標準輸出,並一切發送到標準輸出包含在你的函數返回什麼!爲了使你的函數返回只有$objSelection你只需要抑制上面的行輸出。至少有5種方法可以做到這一點。一種流行的一個就是投它無效:

[void] $objWord.Documents.Open($Filename) 
+0

非常感謝!那正是我在尋找的。 順便說一句,你寫在那裏的偉大的文章。 – Paxz

相關問題