Передача FromArgb() в качестве параметра функции
У меня есть следующая функция:
Function Color-Cells {
Param (
[Parameter(
Mandatory = $true,
Valuefrompipeline = $true)]
[String]$Range,
[Parameter(
Mandatory = $true)]
[System.Drawing.Color]$Color
)
$Global:WorkSheet.range($Range).Interior.color = $Color
}#End Function
Который я могу назвать так:
Color-Cells -Range "A1" -Color LightBlue
Без проблем.
Я хотел бы иметь возможность вызывать функцию следующим образом:
Color-Cells -Range "A1" -Color FromArgb(217,217,217)
чтобы получить более детальный выбор цвета ячейки, однако, когда я это делаю, я получаю следующую ошибку:
Color-Cells : Cannot process argument transformation on parameter 'Color'. Cannot convert value
"FromArgb(217,190,238)" to type "System.Drawing.Color". Error: "FromArgb(217 is not a valid value for Int32."
At line:70 char:32
+ Color-Cells -Range "A1" -Color "FromArgb(217,217,217)"
+ ~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidData: (:) [Color-Cells], ParameterBindingArgumentTransformationException
+ FullyQualifiedErrorId : ParameterArgumentTransformationError,Color-Cells
Я попытался вызвать функцию следующим образом:
"FromArgb(217,217,217)"
'FromArgb(217,217,217)'
`"FromArgb(217,217,217)`"
И все они выдают ошибки. Я не очень знаком с.Net, поэтому я не уверен, как это исправить. Моя конечная цель - создать функцию, которая может окрашивать диапазон ячеек на основе [System.drawing.color]
известное имя или значение RGB.
Изменить для ясности:
TypeName является конкретным типом параметра в функции. Когда я вызываю функцию Color-cells
-Color
параметр является типом [System.Drawing.Color]
, Когда я вызываю функцию, используя статическое свойство (Color-Cells -Color LightBlue
например), работает, просто найди. Тем не менее, когда я пытаюсь вызвать метод (Color-Cells -Color FromArgb(217,217,217)
например), вот когда я получаю сообщение об ошибке. Есть ли способ передать только метод в функцию?
Согласно ответу Майка, я могу полностью назвать функцию, подобную этой:
Color-Cell -Range "A1" -Color $([System.Drawing.Color]::FromArgb(217,190,238))
Тем не менее, я хотел бы вызвать функцию (используя метод) без добавления $()
вокруг команды и без [System.Drawing.Color]::
как я могу только со свойствами (например, LightBlue).
1 ответ
Для вызова статических методов используйте [TYPENAME]::MethodName(args)
,
Так что делайте то, что вы хотите, используйте это:
[System.Drawing.Color]::FromArgb(217,217,217)