Код, который вы используете для цитирования аргументов, неверен, так как он пропускает первый символ кавычки в самом имени макроса.Кроме того, числовые параметры не нужно заключать в кавычки, если ваш макрос не может преобразовать эти значения, заданные в виде строки, обратно в числовые типы.
Возможно, использование небольшой вспомогательной функции для цитирования может помочь:
function Quote-Param([object[]]$param) {
# helper function to return given parameter(s) quoted unless they are numeric
[decimal]$number = 0
foreach ($p in $param) {
if ([decimal]::TryParse($p, [ref]$number)) { $p } else { ('"{0}"' -f $p) }
}
}
$MacroParams = "Param 1#Param 2#Param 3#123#blah#456.789"
$MacroName = 'MyMacro'
$arguments = @(Quote-Param $MacroName) # force as array for the first argument
$arguments += Quote-Param $MacroParams.Split("#")
$arguments = $arguments -join ','
Write-Host $arguments -ForegroundColor Yellow
Это вернет $arguments
строку:
"MyMacro","Param 1","Param 2","Param 3",123,"blah",123456.789
Редактировать
Ваш код не показывает, как вы создаете объект $xl
, возможноиспользуя $xl = New-Object -ComObject Excel.Application
.
После создания объекта вы можете установить некоторые свойства, например $xl.Visible = $false
.Также можно установить свойство, которое позволяет запускать макросы или не вызывать AutomationSecurity
.
Чтобы включить макросы:
$xl.AutomationSecurity = 1 # msoAutomationSecurityLow
Вы можете установить для этого свойства любое из следующих значений:
Constant Value Description
-------- ----- -----------
msoAutomationSecurityLow 1 Enables all macros
msoAutomationSecurityByUI 2 Uses the security setting specified in the Security dialog box
msoAutomationSecurityForceDisable 3 Disables all macros in all files opened programmatically without showing any security alerts
Надеюсь, это поможет