【问题标题】:date conditional formatting in xlsxwriter formatting blank cells and cells that meet criteriaxlsxwriter 中的日期条件格式格式化空白单元格和符合条件的单元格
【发布时间】:2019-05-02 16:17:32
【问题描述】:

我有一个日期列,我想用 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()

【问题讨论】:

    标签: python python-3.x conditional-formatting xlsxwriter


    【解决方案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()
    

    输出:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-24
      • 1970-01-01
      • 2017-03-18
      相关资源
      最近更新 更多