我正在尝试使用start宏来自动化一些不同的Excel文件,其中其他参数存储在作业CSV文件atm中。
问题是如何在运行宏的Excel中构建运行命令,并使用类似这样的参数,其中“开始”是宏的名称,在本示例中为3个其他参数。
0
我尝试将命令和参数构建为一个字符串,就像使用普通的x3
一样,然后调用invoke-expression,但是run命令只是将其读取为一个字符串。
那么,我该如何使用动态数量的参数构建“运行”命令,而无需构建某种可以处理1-5个不同参数的开关。所有调用$excel.Run("Start","param1","param2","param3")
命令的参数数量不同,这有点丑陋,而且不太动态。
答案 0 :(得分:1)
基本上,您正在寻找一种方法。这仅对cmdlet和函数有用,而对方法无用。但是PowerShell支持称为Dynamic Method Invocation的东西,在这里可以很好地工作。
考虑这个比较两个字符串的基本示例。我们为.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)
我没有理想的设置来测试它,但它应该起作用。小心返回值可能需要通过这种方法进行不同的处理。测试!
答案 1 :(得分:0)
您可以使用以下参数运行宏:
char.MaxValue