如何使用 xml 从 Excel 中提取条件格式规则列表?

问题描述 投票:0回答:1

我需要提取具有条件格式的所有单元格的列表,其中它们可能由于条件格式而突出显示为黄色。我尝试使用 openxpyxl 来执行此操作,但它只会为我提供具有条件格式规则的所有单元格的列表,无论该规则是否可能导致黄色、红色、蓝色等突出显示。我无法使用 pywin32 或 xlwings 来执行此操作,因为它们运行太慢。

当前openpyxl代码:

wb_openpyxl = openpyxl.load_workbook(filename)
ws_openpyxl = wb_openpyxl["Sheet1"]
for cf in ws_openpyxl.conditional_formatting:
     print(cf)

#<ConditionalFormatting A5:A9>

想要的结果:

条件格式 A5:A9 如果 a5>0,(与黄色相关的十六进制颜色)

python excel xml openpyxl
1个回答
0
投票

以下将根据实际使用的规则以一些格式提取 CF 详细信息。

颜色默认为十六进制,但如果您需要看到“黄色”而不是“FFFF00”,可以交叉匹配。

from openpyxl import load_workbook


wb_openpyxl = openpyxl.load_workbook(filename)
ws_openpyxl = wb_openpyxl["Sheet1"]

print('')
cs_list = ['Start', 'End']
for cf in ws_openpyxl.conditional_formatting:
    print(f"Conditional Format Range: {cf.cells}")
    print("Rules")
    for rule in cf.cfRule:
        if rule.colorScale:
            print(f"Rule: {rule.priority}: Color Scale")
            for idx, cs in enumerate(rule.colorScale.cfvo):
                print(f'{cs_list[idx]}: _Type: {cs.type} _Value: {cs.val} _Color: {rule.colorScale.color[idx].rgb[2:]}')
        else:
            print(f"Rule: {rule.priority}: Formula")
            print(f"Operation: {'Use a formula' if rule.operator is None else f'Format {rule.operator}'} "
                  f"{str(rule.formula)[1:-1]} "
                  f"Stop if True: {'Disabled' if rule.stopIfTrue is None else 'Enabled'}")
            print(f"bfColor: {rule.dxf.fill.bgColor.rgb[2:]}")
            print(f"endColor: {rule.dxf.fill.end_color.rgb[2:]}")
            print(f"fgColor: {rule.dxf.fill.fgColor.rgb[2:]}")
        print('-----------------------')
© www.soinside.com 2019 - 2024. All rights reserved.