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

Ric*_*son 5 powershell closedxml

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

$cell.Style.Fill.BackgroundColor.Color(219, 229, 249)
Run Code Online (Sandbox Code Playgroud)

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

任何建议将不胜感激。大多数示例是 C#,它们通常可以无缝转换,但这是我没有运气弄清楚的示例。

感谢里克·安德森

Ric*_*son 6

更新(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
Run Code Online (Sandbox Code Playgroud)

以下是使用 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
Run Code Online (Sandbox Code Playgroud)

如果您需要使用边框,这也适用,但您可以直接使用。

$cell.Style.Border.OutsideBorder = [ClosedXML.Excel.XLBorderStyleValues]::Thin
$cell.Style.Border.InsideBorder = [ClosedXML.Excel.XLBorderStyleValues]::Thin
Run Code Online (Sandbox Code Playgroud)

你也可以用同样的东西来改变边框颜色

$cell.Style.Border.BottomBorderColor = [ClosedXML.Excel.XLColor]::CornflowerBlue
Run Code Online (Sandbox Code Playgroud)

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