需要在 PowerShell 脚本中使用 ClosedXML 设置单元格背景颜色

Need to set a cell background color with ClosedXML in a PowerShell script

我正在使用 PowerShell 3 和 ClosedXML 将文件信息写入 excel 工作表。在其中一个单元格中,我需要将背景颜色设置为浅蓝色(矢车菊蓝色或 RGB 中的 219、229、249)。我尝试了多种方法,但到目前为止,还没有成功。根据 ClosedXML 站点,我应该能够引用 XLColor 对象。我还尝试了多种设置背景颜色的变体。

$cell.Style.Fill.BackgroundColor.Color(219, 229, 249)

或 $cell.Style.Fill.SetBackgroundColor(6) 要么 $cell.Style.Fill.SetBackgroundColor(XLColor.Blue)

如有任何建议,我们将不胜感激。大多数示例都是 C# 的,通常可以非常无缝地翻译,但这是我没有运气搞清楚的一个。

谢谢 里克·安德森

更新(7 月 4 日凌晨 12:15) 我破解了这个秘密,这也有助于在 Borders 上工作,并且肯定会在其他项目上有所帮助。

处理颜色的诀窍是定义一个类型为ClosedXML.Excel.XLColor的变量并同时分配你想要的值。您可以使用多个选项来指定颜色:

$SomeColor = [ClosedXML.Excel.XLColor]::AirForceBlue #Pick a color from the list
$SomeColor = [ClosedXML.Excel.XLColor]::FromArgb() #RGB
$SomeColor = [ClosedXML.Excel.XLColor]::FromColor() #System.Drawing.Color
$SomeColor = [ClosedXML.Excel.XLColor]::FromHtml() #HTML Color
$SomeColor = [ClosedXML.Excel.XLColor]::FromIndex() #numeric index of the colors
$SomeColor = [ClosedXML.Excel.XLColor]::FromKnownColor() #System.Drawing.Color
$SomeColor = [ClosedXML.Excel.XLColor]::FromName() #String name of color
$SomeColor = [ClosedXML.Excel.XLColor]::FromTheme() #XLThemeColor

下面是一个使用 FromArgb 选项的例子:

#Define the color variables I need. In this case a color for the hash column and a 
#color for the Title/Header row.
$HashColor = [ClosedXML.Excel.XLColor]::FromArgb(219, 229, 249)
$TitleColor = [ClosedXML.Excel.XLColor]::FromArgb(221, 217, 195)

. . . Do some stuff

#Format the Header Row
$headerRange = $worksheetObject.Range("a1","d1")
$headerRange.Style.Font.Bold=$True
$cell = $worksheetObject.Range($headerRange)
$cell.Style.Fill.BackgroundColor =$TitleColor

. . . Do some stuff

#Write file information row
$row++
$worksheetObject.Cell($row,1).Value=$File.Name
$worksheetObject.Cell($row,2).Value=$FileType
$worksheetObject.Cell($row,3).Value=$strFileLen
$stringRow = $row.ToString()
$FirstCell = "A" + $stringRow
$LastCell  = "D" + $stringRow
$Range     = $FirstCell + ":" + $LastCell
$cell = $worksheetObject.Range($Range)
$cell.Style.Fill.BackgroundColor =$HashColor

如果您需要处理边框,这也适用,但您可以直接进行。

$cell.Style.Border.OutsideBorder = [ClosedXML.Excel.XLBorderStyleValues]::Thin
$cell.Style.Border.InsideBorder = [ClosedXML.Excel.XLBorderStyleValues]::Thin

您也可以使用同样的方法来更改边框颜色

$cell.Style.Border.BottomBorderColor = [ClosedXML.Excel.XLColor]::CornflowerBlue

这不是最清晰的解决方案,但弄清楚此方法将对未来在 PowerShell 中的 ClosedXML 工作有很大帮助。希望这可以帮助那里的人。