如何在 openpyxl 中 select 具有特定颜色的单元格?

How to select cell with specific color in openpyxl?

假设一列有两种颜色:白色和绿色。

任务:使用 openpyxl 到 select 绿色单元格。

我已经阅读了官方文档Working with styles,但没有弄清楚如何去做。


还有很多小问题:比如当前颜色的编码怎么算?

Bellow 是设置 cell.

的(背景)颜色的一种可能性

在这个例子中,我们使用openpyxl.styles.fills.PatternFillclass。 它使用模式应用统一填充(这里是 "solid" 模式), 具有前景色(绿色)和背景色(不可见 带有实心图案,但可以看到另一个像 'gray125').

你也可以 openpyxl.styles.fills.GradientFill class 产生渐变填充…

import openpyxl.styles

wb = load_workbook(xls_path)
ws = wb.active

cell = ws["A1"]
cell.fill = openpyxl.styles.PatternFill('solid', openpyxl.styles.colors.GREEN)

因此,要获得填充图案的颜色,您可以阅读 fill.fgColor (或背景 fill.bgColor)属性。 你得到一个 openpyxl.style.Color class.

的实例

调用 rgb 属性(它是一个描述符)以获取字符串形式的 RGB 颜色。 注意:此值有 4 个分量:Alpha 颜色(透明度)和 classic RGB 颜色。

color = cell.fill.fgColor
assert isinstance(color, openpyxl.styles.Color)
assert color.rgb == "0000FF00"  # Green

但是,这些都帮不了你。因为列也有样式

一个工作表包含 column_dimensions 个集合。 每个 column_dimensions 包含属性(样式等) 对于一个或多个列(列组的概念)。 column_dimensionsminmax 属性给出 列索引(组的开始和结束索引,从 1 开始)。

cd = ws.column_dimensions["A"]
assert cd.min == 1 and cd.max == 1

像单元格一样,您可以设置列的填充模式:

cd.fill = openpyxl.styles.PatternFill('solid', openpyxl.styles.colors.GREEN)

注意:单元格样式优先于列样式。 换句话说,如果将列样式设置为白色,但将单元格样式设置为绿色, 用户将看到一个绿色单元格。