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

How to pass a COM object parameter to a PowerShell function?

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

这是我的函数:

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:\rclocher3\Excel-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 。也许,也许不……倾向于后者,但不确定。如果类型错误,您可以省略该类型。很难想象它是一个对象数组。