繁体   English   中英

在openpyxl条件格式公式中使用多个单元格

[英]Use multiple cells in openpyxl conditional formatting formula

我正在尝试在 Python 中编写一个电子表格,它使用条件格式来查找连续三个单元格中最大的一个并给它一个绿色填充。 我已经能够比较两个单元格,但是在我可以看到的 openpyxl 文档中关于如何编写公式的信息很少,而且 StackOverflow 上关于这个问题的信息也很少。

对于两个按需要工作的单元格,我的代码如下:

sheet.conditional_formatting.add(f'G${row+iter_num}', CellIsRule(operator='greaterThan', \
formula=[f'H${row+iter_num}'], fill=greenfill))
sheet.conditional_formatting.add(f'H${row+iter_num}', CellIsRule(operator='greaterThan', \
formula=[f'G${row+iter_num}'], fill=greenfill))

{row+iter_num}是必需的,因为它用于 for 循环。

为了对更多单元格进行此比较,我尝试将公式更改为包含and

sheet.conditional_formatting.add(f'G${row+iter_num}', CellIsRule(operator='greaterThan', \
formula=[f'H${row+iter_num}' and f'I${row+iter_num}'], fill=greenfill))
sheet.conditional_formatting.add(f'H${row+iter_num}', CellIsRule(operator='greaterThan', \
formula=[f'G${row+iter_num}' and f'I${row+iter_num}'], fill=greenfill))
sheet.conditional_formatting.add(f'I${row+iter_num}', CellIsRule(operator='greaterThanOrEqual', \
formula=[f'G${row+iter_num}' and f'H${row+iter_num}'], fill=greenfill))

在此处输入图像描述

我不确定在这种情况下使用and是否合乎逻辑,但就像我说的那样,文档中的内容很少。 我也无法使用任何比较来找出 Python 中的 G、H 和 I 中哪个最大,因为它们是由 excel 函数确定的。 对于上图,每行的绿色单元格应该是 200、16、82、1890、150(秒)、1025、527、392、150(秒),每行应该只有一个绿色单元格。

如果直接在 Excel 中执行此操作,我会使用公式。 您需要将相同的公式放入 Rule() 的公式参数中。 这是一个完整的工作示例:

from openpyxl import Workbook
from openpyxl.formatting import Rule
from openpyxl.styles import Font, PatternFill, Border
from openpyxl.styles.differential import DifferentialStyle

wb = Workbook()
ws = wb.active

ws.append([1, 2, 3])
ws.append([3, 1, 2])
ws.append([2, 3, 1])
ws.append([1, 2, 3])
ws.append([3, 1, 2])
ws.append([2, 3, 1])

green_fill = PatternFill(bgColor="00FF00")
dxf = DifferentialStyle(fill=green_fill)
r = Rule(type="expression", dxf=dxf, formula=["=A1=MAX($A1:$C1)"])
ws.conditional_formatting.add('A1:C6', r)

# Save the file
wb.save("sample.xlsx")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM