【问题标题】:Powershell run Excel macro with dynamic amount of parametersPowershell 使用动态参数量运行 Excel 宏
【发布时间】:2019-02-01 21:15:24
【问题描述】:

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

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

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

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

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

【问题讨论】:

标签: vba excel powershell parameters


【解决方案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)

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

【讨论】:

  • 谢谢,动态方法调用正是我所需要的,因为它允许我动态构建参数数组,而且我不使用返回值。
【解决方案2】:

您可以使用以下参数运行宏:

$excel.Run('Workbookobject.Macroname', 'param1', 'param2', 'param3', ...)

【讨论】:

    猜你喜欢
    • 2021-10-27
    • 2013-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-27
    • 1970-01-01
    相关资源
    最近更新 更多