Мне нужно извлечь список всех ячеек, имеющих условное форматирование, где они могут быть выделены желтым цветом в результате условного форматирования. Я попытался сделать это с помощью 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 (шестнадцатеричный цвет, связанный с желтым цветом)
В основном это простые правила, такие как «выделить желтый цвет, если ячейка пуста», поэтому я планирую использовать openpyxl, чтобы увидеть формулу и цвет, а затем также использовать open pyxl, чтобы проверить, пусто ли значение ячейки.






Ниже будут извлечены данные 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('-----------------------')
Вам понадобится такое приложение, как Excel, чтобы применить условные форматы для получения оцененных цветов.