Как передать необязательные аргументы в метод объекта с помощью PowerShell? - PullRequest
0 голосов
/ 11 марта 2019

Я хотел бы вызвать метод объекта.Этот метод имеет много дополнительных параметров, но я хотел бы использовать только один.Как это сделать в PowerShell?

Пример: у объекта Workbooks есть метод OpenText ( ссылка ), который имеет много необязательных параметров, но я хотел бы передать только значение для параметраDecimalSeparator, все остальные, которые я не хочу указывать.

На других языках я бы сделал что-то вроде этого:

$App.Workbooks.OpenText($path, DecimalSeparator=$decSeparator)

Скажите, пожалуйста, как это сделать в PowerShell?

1 Ответ

0 голосов
/ 11 марта 2019

Вы пытались, или вы говорите, что сделали, и это не сработало?

Если для API или DOM требуется передать параметр или несколько параметров, даже если он пустой / нулевой, его необходимо передать.PowerShell не контролирует это.

Вы предоставили ссылку на DOM / метод, и в нем должно быть конкретно указано, что он будет и не разрешать.

Беглый взгляд на статью, говорит, что требуется только один параметр, а все остальные необязательны.Ничто в связанном документе не утверждает, что они позиционные, кроме требуемого.Таким образом, вы можете передать в любом порядке или столько, сколько захотите.

Самый простой способ договориться о том, можете ли вы делать X или Y в документах Office, - это открытьфайл в Office, включите Macro Recorder, выполните шаги в графическом интерфейсе как обычно, позволяя рекордеру захватить все действия, затем посмотрите на получившийся VBA и преобразуйте его для использования в PowerShell.

Преобразование VBA для использованияв PowerShell - это хорошо продуманные вопросы и ответы.

Конвертировать код из Excel Macro в PowerShell

   lrow = Range("G" & Rows.Count).End(xlUp).Row
    Set MR = Range("G2:G" & lrow)
    For Each cell In MR
        If UCase(Trim(cell.Value)) = "FALSE" Then
            cell.Interior.ColorIndex = 3
        End If
    Next


$objExcel = New-Object -ComObject Excel.Application

$objExcel.Visible = $true
$objExcel.DisplayAlerts = $false

$filePath = "c:\logs\2015-04-23.csv"

$xlsFilePath = Get-Item -Path $filePath | % { Join-Path (Split-Path $_ -Parent) "$($_.BaseName).xls" } 

$workBook = $objExcel.Workbooks.Open($filePath)
$workSheet = $WorkBook.sheets | select -First 1

$xlup = -4162

$lrow = $workSheet.cells.Range("G" + $workSheet.Rows.Count).End($xlup).Row

$workSheet.cells.Range("G2:G" + $lrow) | % { 
    $value = $_.Text
    if($value.ToUpper() -eq "TRUE"){
       $_.Interior.ColorIndex = 3 
    }
}

$WorkBook.SaveAs($xlsFilePath, 18) 
$objExcel.Quit()

Я помещаю это здесь только как напоминание, но основываясь на вашем постефрагмент, я собираюсь предположить, что вы уже знали это.Тем не менее, это на всякий случай.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...