我需要提取具有条件格式的所有单元格的列表,其中它们可能由于条件格式而突出显示为黄色。我尝试使用 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,(与黄色相关的十六进制颜色)
以下将根据实际使用的规则以一些格式提取 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('-----------------------')