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

2024-04-30 00:24:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试用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))

enter image description here

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


Tags: andaddfilloperatornumsheetrowconditional
1条回答
网友
1楼 · 发布于 2024-04-30 00:24:12

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

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")

相关问题 更多 >