简体   繁体   English

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

[英]date conditional formatting in xlsxwriter formatting blank cells and cells that meet criteria

I have a date column I am trying to format with xlsxwriter.我有一个日期列,我正在尝试使用 xlsxwriter 进行格式化。

The column can have a date in it or be blank.该列可以包含日期或为空。

The conditional formatting (highlight cell when date is < today) I am trying to apply is working.我尝试应用的条件格式(当日期为 < 今天时突出显示单元格)正在工作。 But it is also applying the same formatting rules to the blank cells.但它也对空白单元格应用相同的格式规则。

How can I prevent it from formatting the blank cells?如何防止它格式化空白单元格?

See below for code:代码见下:


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()

In order to use conditional formats in XlsxWriter you should first figure out what you want to do in Excel, and then transfer it over.为了在 XlsxWriter 中使用条件格式,您应该首先弄清楚您想在 Excel 中做什么,然后将其转移。

Dates in Excel are just numbers with a format so it looks like a blank cell is interpreted, by Excel, as 0 and thus as the 1900-01-01 epoch date. Excel 中的日期只是具有格式的数字,因此它看起来像一个空白单元格被 Excel 解释为 0,因此作为 1900-01-01 纪元日期。

One way to work around this is to get a conditional format range between the the first non-zero date and the date you want.解决此问题的一种方法是获取第一个非零日期和所需日期之间的条件格式范围。 In XlsxWriter you could do it like this:在 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()

Output:输出:

在此处输入图片说明

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM