Powershell运行带有动态参数数量的Excel宏

时间:2018-08-27 10:41:06

标签: excel vba excel-vba powershell parameters

我正在尝试使用start宏来自动化一些不同的Excel文件,其中其他参数存储在作业CSV文件atm中。

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

0

我尝试将命令和参数构建为一个字符串,就像使用普通的x3一样,然后调用invoke-expression,但是run命令只是将其读取为一个字符串。

那么,我该如何使用动态数量的参数构建“运行”命令,而无需构建某种可以处理1-5个不同参数的开关。所有调用$excel.Run("Start","param1","param2","param3") 命令的参数数量不同,这有点丑陋,而且不太动态。

2 个答案:

答案 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