我有一个日期列,我正在尝试使用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()
答案 0 :(得分:1)
为了在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()
输出: