Как извлечь список правил условного форматирования из Excel с помощью XML?

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

Вам понадобится такое приложение, как Excel, чтобы применить условные форматы для получения оцененных цветов.

Charlie Clark 16.04.2024 17:46

В основном это простые правила, такие как «выделить желтый цвет, если ячейка пуста», поэтому я планирую использовать openpyxl, чтобы увидеть формулу и цвет, а затем также использовать open pyxl, чтобы проверить, пусто ли значение ячейки.

Hooded 0ne 16.04.2024 17:48
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
2
106
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ниже будут извлечены данные 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('-----------------------')

Другие вопросы по теме