如何将COM对象参数传递给PowerShell函数



我有一个PowerShell脚本,可以打开几个Excel电子表格并写入每个电子表格中的一个单元格。我想把代码放在打开每个电子表格,写入其中,并保存在一个函数中。我不想为每个电子表格创建一个Excel.ApplicationCOM对象的新实例,而是想将一个实例传递给函数,以便可以重用该实例。

这是我的功能:

function InsertBlurb
{
param([Object[]]$xl, [string]$filename, [string]$blurb)
$WorkBook = $xl.Workbooks.Open($filename)
$WorkSheet = $WorkBook.Sheets.Item("Print Out")
$WorkSheet.Cells.Item(12, "A") = $blurb
$WorkBook.Save()
$WorkBook.Close()
}
# Call looks like this
InsertBlurb($objExcel, $dsBook, $blurb)

当我尝试运行该函数时,我得到一个错误:

You cannot call a method on a null-valued expression.
At T:rclocher3Excel-to-PDF2.ps1:32 char:35
+     $WorkBook = $xl.Workbooks.Open <<<< ($filename)
+ CategoryInfo          : InvalidOperation: (Open:String) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull

如何将COM对象Excel.Application的实例传递给PowerShell函数?

首先,您的呼叫应该是:

InsertBlurb $objExcel $dsBook $blurb

调用Powershell函数时不使用括号和逗号。

IDK,如果您在函数中定义了$xl写入。也许,也许不是。。。倾向于后者,但不确定。如果类型错误,可以省略该类型。很难想象它是一个对象数组。

最新更新