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

时间:2016-11-07 18:04:27

标签: python excel openpyxl

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

任务:使用openpyxl选择绿色单元格。

我已阅读官方文档Working with styles,但未能弄清楚如何操作。

有许多小问题:例如,如何找出当前颜色的代码?

1 个答案:

答案 0 :(得分:3)

Bellow是设置单元格的(背景)颜色的一种可能性。

在此示例中,我们使用openpyxl.styles.fills.PatternFill类。 它使用图案应用均匀填充(这里,它是“实心”图案), 前景色(绿色)和背景色(不可见) 具有实心图案,但可以看到另一个像'gray125'。

您也可以使用openpyxl.styles.fills.GradientFill课程 产生渐变填充...

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类的实例。

调用rgb属性(它是描述符)以将RGB颜色作为字符串。 注意:此值有4个组件:Alpha颜色(透明度)和经典RGB颜色。

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

但是,这一切都无济于事。因为列的样式也是

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

column_dimensions

与单元格类似,您可以设置列的填充图案:

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

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