условное форматирование даты в xlsxwriter, форматирование пустых ячеек и ячеек, соответствующих критериям - PullRequest
1 голос
/ 02 мая 2019

У меня есть столбец даты, который я пытаюсь отформатировать с помощью xlsxwriter.

Столбец может содержать дату или быть пустым.

Условное форматирование (ячейка выделения, когда дата <сегодня), которую я пытаюсь применить, работает.Но он также применяет те же правила форматирования к пустым ячейкам.</p>

Как я могу предотвратить форматирование пустых ячеек?

См. Ниже код:


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

1 Ответ

1 голос
/ 03 мая 2019

Чтобы использовать условные форматы в 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()

Вывод:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...