Xlsxwriter条件格式设置问题

时间:2019-03-25 18:41:57

标签: python conditional-formatting xlsxwriter

我的条件格式如下所示:

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的值,将格式切换为over并在0-100之间切换为警告格式。但是,最终发生的情况是,对于没有值的字段,它将把它视为0并使用警告格式。我只希望将具有会计编号的字段具有两种格式之一。如果为空,则应该没有格式。

2 个答案:

答案 0 :(得分:1)

如@martineau所指出的,并在the documentation中突出显示,将第二种格式的'type': 'cell'更改为'type': 'blanks'时,应将over格式应用于所有存在的单元格没有价值。

您还需要删除criteriavalue键:

worksheet_budget.conditional_format('D2:D100', {'type': 'blanks',
                                       'format': over})

答案 1 :(得分:1)

几乎每次我回答有关XlsxWriter中的条件格式的问题时,我都会说同样的话:首先弄清楚如何在Excel中进行操作,然后将其应用于XlsxWriter。

在Excel中,条件格式问题似乎将空白单元格视为零是一个已知问题/功能。对于这个问题,我遵循了this post中一种方法的建议,并为空白单元格设置了其他默认格式。我还需要设置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