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