Проблема условного форматирования Xlsxwriter - PullRequest
2 голосов
/ 25 марта 2019

У меня есть этот условный формат, показанный ниже:

worksheet_budget.conditional_format('D2:D100', {'type': 'cell',
                                            'criteria': 'between',
                                            'minimum': 0,
                                            'maximum': 100,
                                            'format': caution})

worksheet_budget.conditional_format('D2:D100', {'type': 'cell',
                                           'criteria': '<',
                                           'value': 0,
                                           'format': over})

Это предназначено для каждого значения меньше 0, переключите форматирование на более и между 0 - 100, чтобы формат предостережения. Однако в конечном итоге происходит то, что для полей без значения он будет обрабатываться так, как если бы он был равен 0, и использовать формат предостережения. Я хочу, чтобы только поля, которым присвоен учетный номер, имели один из двух форматов. Если оно пустое, оно не должно иметь форматирования.

Ответы [ 2 ]

1 голос
/ 26 марта 2019

Почти каждый раз, когда я отвечаю на вопрос об условных форматах в XlsxWriter, я говорю одно и то же: сначала выясните, как это сделать в Excel, а затем примените его к XlsxWriter.

Кажется, что проблема условных форматов, рассматривающих пустые ячейки как ноль, является известной проблемой / функцией в Excel. Я следовал совету одного из методов в этой публикации по этому вопросу и установил дополнительный формат по умолчанию для пустых ячеек. Мне также нужно было установить свойство stop_if_true. Вот рабочий пример:

import xlsxwriter

workbook = xlsxwriter.Workbook('conditional_format.xlsx')
worksheet = workbook.add_worksheet()

# Add a format. Light red fill with dark red text.
format1 = workbook.add_format({'bg_color': '#FFC7CE',
                               'font_color': '#9C0006'})

# Add a format. Green fill with dark green text.
format2 = workbook.add_format({'bg_color': '#C6EFCE',
                               'font_color': '#006100'})

# Add a default format.
format3 = workbook.add_format()


# Some sample data to run the conditional formatting against.
data = [
    [34, -75, None, 75, 66, 84, 86],
    [6, 24, 1, 60, 3, 26, 59],
    [None, 79, 97, -13, 22, 5, 14],
    [-27, -71, None, 17, 18, 0, 47],
    [88, 25, -33, 23, 67, "", 36],
    ['', 100, 20, 88, 54, 54, 88],
    [6, 57, '', 28, 10, 41, 48],
    [52, 78, -1, 96, 26, 0, ""],
    [60, -54, 81, None, 81, 90, 55],
    [70, 5, 46, 14, 71, 41, 21],
]


for row, row_data in enumerate(data):
    worksheet.write_row(row + 2, 1, row_data)

worksheet.conditional_format('B3:H12', {'type': 'blanks',
                                        'stop_if_true': True,
                                        'format': format3})

worksheet.conditional_format('B3:H12', {'type': 'cell',
                                        'criteria': 'between',
                                        'minimum': 0,
                                        'maximum': 100,
                                        'format': format1})

worksheet.conditional_format('B3:H12', {'type': 'cell',
                                        'criteria': '<',
                                        'value': 0,
                                        'format': format2})

workbook.close()

Выход:

enter image description here

1 голос
/ 25 марта 2019

Как указывало @martineau и как указано в документации , изменение 'type': 'cell' во втором формате на 'type': 'blanks' должно применять формат over ко всем ячейкам, для которых значение отсутствует.

Вам также необходимо удалить ключи criteria и value:

worksheet_budget.conditional_format('D2:D100', {'type': 'blanks',
                                       'format': over})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...