Условное форматирование с openpyxl на основе текста

У меня есть электронная таблица, которую я создаю с помощью openpyxl, которая содержит ряд системных проверок. На основании правил; слова Pass, Fail или Informational вставлены в столбец E в моей электронной таблице. Я хотел бы использовать Openpyxl для условного форматирования заполнения электронной таблицы на основе значения Pass или Fail. Что-то вроде зеленого для прохождения и красного для неудачи.

Мой текущий код для openpyxl:

wb = Workbook()
ws = wb.active
ws.freeze_panes = ws.cell('A3') 
ws.title = 'Best Practice Report for XXX'
ws['A1'] = 'Best Practice Report for XXX %s' % curdate
ws['A2'] = 'IP Address/FQDN'
ws['B2'] = 'BP Number'
ws['C2'] = 'Title'
ws['D2'] = 'Priority'
ws['E2'] = 'Status'
ws['F2'] = 'Description'
a1 = ws['A1']
a1.font = Font(size=20)
redFill = PatternFill(start_color='FFEE1111', end_color='FFEE1111', fill_type='solid')

ws.conditional_formatting.add('E4:E1000', FormatRule(text=['Fail'], stopIfTrue=True, fill=redFill))     
wb.save('bp--TESTresults.xlsx') 

Моя проблема связана с правилом условного форматирования, я не могу найти хороших примеров условного форматирования на основе текста в ячейке.

Обновление
Благодаря ответу Чарли Кларка у меня все заработало. Создал два правила следующим образом.

ws.conditional_formatting.add('E4:E1000', FormulaRule(formula=['NOT(ISERROR(SEARCH("Pass",E4)))'], stopIfTrue=True, fill=greenFill))    
ws.conditional_formatting.add('E4:E1000', FormulaRule(formula=['NOT(ISERROR(SEARCH("Fail",E4)))'], stopIfTrue=True, fill=redFill))

person Jessica Ferguson    schedule 09.07.2015    source источник
comment
У меня возникнет соблазн использовать самоанализ существующего файла. Начиная с openpyxl 2.2 правила отображаются так, как их видит Excel. Я согласен, что документы могли бы быть намного лучше, но лично у меня очень мало опыта работы с условным форматированием.   -  person Charlie Clark    schedule 09.07.2015


Ответы (1)


Я только что набросал файл и провел кое-какой самоанализ. Он имеет значения в формате A2: A5, я думаю, это должно вам помочь:

from openpyxl import load_workbook
wb = load_workbook("Issues/cf.xlsx")
ws = wb.active
ws.conditional_formatting.cf_rules
{'A2:A5': [<openpyxl.formatting.rule.Rule object at 0x108e6dfd0>]}
rule = _['A2:A5']
rule = rule[0]
rule.type
'containsText'
rule.formula
['NOT(ISERROR(SEARCH("fail",A2)))']
rule.stopIfTrue
None
rule.operator
'containsText'
person Charlie Clark    schedule 09.07.2015
comment
Спасибо за эту информацию, она помогла мне понять, как реализовать функции containsBlanks и notContainsBlanks. - person JamesD; 18.12.2019