Powershell запускает макрос Excel с динамическим количеством параметров - PullRequest
0 голосов
/ 27 августа 2018

Я пытаюсь автоматизировать несколько разных файлов Excel с помощью макроса запуска, где дополнительные параметры хранятся в файле CSV задания atm.

Проблема заключается в том, как создать команду запуска для Excel, в которой вызапустите макрос с такими параметрами, где «Старт» - это имя макроса, а в этом примере 3 дополнительных параметра.

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

Я попытался построить команду и параметры в виде строки, как если быесли это был обычный cmd-let, а затем invoke-expression, но команда run просто прочитала его как одну строку.

Так как мне построить команду Run с динамическим числом параметров, не создавая некоторыевид переключателя, который обрабатывает, скажем, 1-5 различных параметров.что все вызывает $excel.run команду с разным количеством параметров, это просто уродливо и не очень динамично.

Ответы [ 2 ]

0 голосов
/ 27 августа 2018

В основном вы ищете способ использовать метод. Это полезно только для командлетов и функций, а не для методов. Однако 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)

У меня нет идеальной настройки для тестирования, но она должна работать. Остерегайтесь возвращаемых значений, возможно, придется обрабатывать по-другому с помощью этого подхода. Тест!

0 голосов
/ 27 августа 2018

Вы можете запустить макрос с такими аргументами:

$excel.Run('Workbookobject.Macroname', 'param1', 'param2', 'param3', ...)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...