vba - Powershell 使用动态参数量运行 Excel 宏
问题描述
我正在尝试使用启动宏自动化一些不同的 Excel 文件,其中附加参数存储在作业 CSV 文件 atm.xml 中。
问题是如何为运行宏的 Excel 构建运行命令,使用类似这样的参数,其中“Start”是宏的名称,在本例中是 3 个附加参数。
$excel.Run("Start","param1","param2","param3")
我已经尝试将命令和参数构建为一个字符串,就像它是一个普通的那样cmd-let
,然后调用表达式,但是运行命令只是将它作为一个字符串读取。
那么如何使用动态数量的参数构建运行命令,而不构建某种可以处理 1-5 个不同参数的开关。都$excel.run
用不同数量的参数调用命令,这有点难看而且不是很动态。
解决方案
基本上,您正在寻找一种方法来解决方法。这仅对 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)
我没有理想的设置来测试它,但它应该可以工作。当心返回值可能需要通过这种方法进行不同的处理。测试!
推荐阅读
- c# - 返回负数的斐波那契随机数生成器
- java - javaFX鼠标事件过滤器
- vue.js - Vuex:我应该在用户点击保存按钮之前更新状态吗?
- ios - 如何使用 Swift 显示和隐藏 UIAlertAction 按钮
- symfony - 如何禁用 EntityType 实体的自动加载?
- javascript - _rnAppleHealthKit.default.initHealthKit 不是函数-> rn-apple-healthkit
- android - 试图一个接一个地显示吐司消息
- c++ - 为什么 HowardHinnant 的 date.h 库中没有 to_stream 和 from_stream 格式的毫秒标志
- php - Laravel 5.5 任务调度程序似乎没有循环遍历我的所有命令
- time-complexity - 该函数的递归关系是什么,因此它的时间复杂度是多少?