我有以下功能:
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)
)时,就会得到错误消息。是否有一种方法将方法传递到函数中?
根据Mike的回答,我可以像这样成功地调用函数:
Color-Cell -Range "A1" -Color $([System.Drawing.Color]::FromArgb(217,190,238))
然而,我想调用函数(使用方法),而不需要在命令周围添加$()
,也不需要[System.Drawing.Color]::
,就像我可以只使用属性(例如LightBlue)一样。
调用静态方法,使用[TYPENAME]::MethodName(args)
。
所以做你想做的,使用这个:
[System.Drawing.Color]::FromArgb(217,217,217)