首页 > 解决方案 > 如何将 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:\rclocher3\Excel-to-PDF2.ps1:32 char:35
+     $WorkBook = $xl.Workbooks.Open <<<< ($filename)
    + CategoryInfo          : InvalidOperation: (Open:String) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull

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

标签: functionpowershellparameterscom

解决方案


首先,您的电话应该是:

InsertBlurb $objExcel $dsBook $blurb

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

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


推荐阅读