xlsxwriter 中的日期条件格式格式化空白单元格和符合条件的单元格

date conditional formatting in xlsxwriter formatting blank cells and cells that meet criteria

我有一个日期列,我正在尝试使用 xlsxwriter 进行格式化。

该列可以包含日期或为空白。

我尝试应用的条件格式(当日期<今天时突出显示单元格)正在运行。但它也将相同的格式规则应用于空白单元格。

如何防止它格式化空白单元格?

代码见下方:


format1 = workbook.add_format({'bg_color':   '#FFC7CE',
                               'font_color': '#9C0006'})
date = datetime.now()

worksheet.conditional_format(due_range, {'type':     'date',
                                        'criteria': 'less than',
                                        'value':    date,
                                        'format':   format1})

writer.save()
workbook.close()

为了在 XlsxWriter 中使用条件格式,您应该首先在 Excel 中弄清楚您要做什么,然后将其传输过来。

Excel 中的日期只是具有某种格式的数字,因此看起来空白单元格被 Excel 解释为 0,因此被解释为 1900-01-01 纪元日期。

解决此问题的一种方法是获取第一个非零日期和所需日期之间的条件格式范围。在 XlsxWriter 中你可以这样做:

import pandas as pd
from datetime import datetime, date

# Create a Pandas dataframe from some datetime data.
df = pd.DataFrame({'Dates': [date(2019, 5, 1),
                             None,
                             date(2019, 5, 2),
                             date(2019, 5, 3),
                             None,
                             date(2019, 5, 4),
                             date(2019, 5, 5)],
                   })


writer = pd.ExcelWriter("pandas_test.xlsx", engine='xlsxwriter')
df.to_excel(writer, sheet_name='Sheet1')
workbook  = writer.book
worksheet = writer.sheets['Sheet1']

format1 = workbook.add_format({'bg_color':   '#FFC7CE',
                               'font_color': '#9C0006'})
date = datetime.now()
due_range = 'B2:B8'

worksheet.conditional_format(due_range, {'type':    'date',
                                        'criteria': 'between',
                                        'minimum':  datetime(1900, 1, 2),
                                        'maximum':  date,
                                        'format':   format1})

worksheet.set_column('B:B', 20)
writer.save()

输出: