首页 > 解决方案 > Powershell 使用动态参数量运行 Excel 宏

问题描述

我正在尝试使用启动宏自动化一些不同的 Excel 文件,其中附加参数存储在作业 CSV 文件 atm.xml 中。

问题是如何为运行宏的 Excel 构建运行命令,使用类似这样的参数,其中“Start”是宏的名称,在本例中是 3 个附加参数。

$excel.Run("Start","param1","param2","param3")

我已经尝试将命令和参数构建为一个字符串,就像它是一个普通的那样cmd-let,然后调用表达式,但是运行命令只是将它作为一个字符串读取。

那么如何使用动态数量的参数构建运行命令,而不构建某种可以处理 1-5 个不同参数的开关。都$excel.run用不同数量的参数调用命令,这有点难看而且不是很动态。

标签: vbaexcelpowershellparameters

解决方案


基本上,您正在寻找一种方法来解决方法。这仅对 cmdlet 和函数有用,对方法没有用。然而 PowerShell 支持一种称为动态方法调用的东西,它可以在这里很好地工作。

考虑这个比较两个字符串的基本示例。我们提供.Compare()一个阵列,您可以根据需要进行更改。

# Compare the two strings of mixed case
$strings = "F","f"
[string]::Compare.Invoke($strings)

# Compare the two strings of mixed case but set the ignore case flag
$strings = "F","f",$true
[string]::Compare.Invoke($strings)

上述结果应为 1,然后为 0,因为这些字符串仅在忽略大小写时匹配。

通常Compare()会返回 True 或 false。以这种方式,它只返回一个整数,其中非零表示不匹配的字符串。

所以让我们用你的代码试试这个。

$arguments = "Start","param1","param2","param3"
$excel.Run.Invoke($arguments)

我没有理想的设置来测试它,但它应该可以工作。当心返回值可能需要通过这种方法进行不同的处理。测试!


推荐阅读