如何迭代Excel文件和ID颜色的单元格值



我有一个excel工作簿,其中列的单元格用特定颜色着色,以保留或排除某些用户,然后这些用户将用于筛选另一个excel工作薄。

我想循环浏览此列,识别红色背景的单元格,并添加一个声明为0的函数列,识别黄色背景的单元格并将1添加到同一函数列,以便用作其他工作簿的筛选器。

我希望使用OpenPyXL来完成这项任务。

column_pi = ws["A"]
for cell in column_pi:
f cell.fill.fgColor == "00FF0000": # Red Hex 
# add column stating 0 as value

也尝试过这个,但没有运气,没有返回任何

red_fill = PatternFill(fill_type=None, start_color='00FF0000', end_color='00FF0000')
yellow_fill = PatternFill(fill_type=None, start_color='00FFFF00', end_color='00FFFF00')
for cell in column_pi:
if cell.fill == yellow_fill:
print(cell)

适用于不为no_fill提供十六进制代码的情况

no_fill = PatternFill(fill_type=None)
for cell in column_pi:
if cell.fill == no_fill:
print(cell)

关于迭代值并检查填充/背景颜色是否为特定颜色,然后添加这样的函数列的最佳方法,有什么想法吗?

fill是一组更复杂的变量,因此在这里寻找它仅与red_fillyellow_fill完全相等是行不通的。这种复杂性主要是由于能够将颜色设置为静态rgba值,或者设置为在主题更改时自动更新的颜色。openpyxl中的样式和PatternFill等参数是同时设置多个这些值的简单方法。

如果您查找某个特定单元格的cell.fill,它会返回类似以下内容:

<openpyxl.styles.fills.PatternFill object>
Parameters:
patternType='solid', fgColor=<openpyxl.styles.colors.Color object>
Parameters:
rgb='FFD9D9D9', indexed=None, auto=None, theme=None, tint=0.0, type='rgb', bgColor=<openpyxl.styles.colors.Color object>
Parameters:
rgb='00000000', indexed=None, auto=None, theme=None, tint=0.0, type='rgb'

可以将这些值直接指定为cell.fill.fill_type(cell.fill.patternType的同义词(、cell.fill.fgColorcell.fill.bgColor的一部分。加上像cell.fill.fgColor.rgb这样的子属性。

你也可以通过选择一个你知道有red_fill的细胞的knowncell.fill.fgColor(如果存在的话(来加快速度。这样,您可以检查fill_typefgColor和/或bgColor中的任何一个是否匹配。尝试:

red_fill = knowncell.fill
for cell in column_pi:
if cell.fill.fgColor == red_fill.fgColor and cell.fill.fill_type == red_fill.fill_type:
print(cell)

但是,我认为不能将knowncell.fillcell.fill直接匹配,因为每次定义新对象时都会创建一个新的openpyxl样式对象。

最新更新