【问题标题】:How to apply conditional formatting in openpyxl?如何在 openpyxl 中应用条件格式?
【发布时间】:2018-05-21 15:45:44
【问题描述】:

我正在使用 openpyxl 来操作 Microsoft Excel 工作表。

我想要做的是添加一个条件格式规则,如果行号是偶数,则用给定的颜色填充行,如果不是,则将该行留空。

在 Excel 中,这可以通过选择所有工作表、使用文本 =MOD(ROW();2)=0=EVEN(ROW()) = ROW() 创建新的格式规则来完成。

我尝试使用以下代码行来实现此行为(例如考虑前 10 行):

redFill = PatternFill(start_color='EE1111', end_color='EE1111', fill_type='solid')
ws2.conditional_formatting.add('A1:A10', FormulaRule(formula=['MOD(ROW();2) = 0'], stopIfTrue=False, fill=redFill))

我的程序运行正常,但是当我尝试打开输出 Excel 文件时,它告诉我该文件包含不可读的内容,并询问我是否要恢复工作表内容。点击是,工作表是我所期望的,但没有格式。

在 openpyxl(可能应用于整个工作表)中应用这种格式的正确方法是什么?

【问题讨论】:

    标签: python python-3.x openpyxl


    【解决方案1】:

    不幸的是,在条件格式中处理公式的方式特别不透明。最好的办法是创建一个具有相关条件格式的文件,并通过解压缩来检查相关文件。规则存储在相关工作表文件中,格式存储在样式文件中。

    但是,我怀疑问题可能仅仅是因为您使用的是“;”在函数中分隔参数:您必须始终使用逗号。

    我的一个项目中的示例公式:

    green_text = Font(color="006100")
    green_fill = PatternFill(bgColor="C6EFCE")
    dxf2 = DifferentialStyle(font=green_text, fill=green_fill)
    r3 = Rule(type="expression", dxf=dxf2)
    r3.formula = ["AND(ISNUMBER(C2), C2>=400)"]
    

    【讨论】:

    • ';'我认为取决于 Excel 的分隔符设置:在我的情况下,Excel 公式使用 ;分隔符,而不是 ',' 。
    • 分隔符设置完全不同。这就是为什么您必须查看生成文件的来源。
    • 生成的文件是什么意思?我想说的是条件格式规则适用于 ;在我的 Excel 中。
    • 所有 Excel 文件实际上都是 zip 存档。 “生成的文件”是此 zip 存档中的文件。
    猜你喜欢
    • 2015-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-24
    相关资源
    最近更新 更多