我创建了一个打开.docx文件的函数:
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
不是同一个ObjectType。这就是为什么我不能再调用这个方法了。
如何将$doc
设置为与$ObjSelection
完全相同而不将其全局化?
答案 0 :(得分:1)
你不实际上看到了更改的返回类型;你所看到的是PowerShell最常见的陷阱之一。事实上,您已经在Simple-Talk.com上的文章A Plethora of PowerShell Pitfalls中遇到了陷阱#1。我鼓励你先去那里 - 陷阱以测验形式呈现 - 让你在答案揭晓之前考虑问题可能是什么。我等一下。
好的,所以如果你仔细阅读了这篇文章,你现在就知道PowerShell从函数中返回“东西”的灵活性就是让你绊倒的原因。具体来说,行$objWord.Documents.Open($Filename)
将输出发送到stdout,发送到stdout的所有都包含在从函数返回的内容中!为了使您的函数仅返回 $objSelection
,您只需要抑制上面一行的输出。至少有5种方法可以做到这一点。一个流行的就是把它变成无效:
[void] $objWord.Documents.Open($Filename)