如何解决在openpyxl条件格式公式中使用多个单元格
我试图用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}',\
formula=[f'G${row+iter_num}'],fill=greenfill))
{row+iter_num}
是必需的,因为它在for循环中使用。
要对更多单元格进行此比较,我尝试将公式更改为包含and
:
sheet.conditional_formatting.add(f'G${row+iter_num}',\
formula=[f'H${row+iter_num}' and f'I${row+iter_num}'],\
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
是否合乎逻辑,但是就像我说的那样,文档中很少。我也无法使用任何比较来找到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,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")
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。