Сравните время с pandas и измените шрифт в соответствии с результатом - PullRequest
0 голосов
/ 06 января 2020

Мне нужно изменить цвет ячейки, если ее значение меньше, чем 08:00:00, она работает с целым числом, но не со строками

import xlsxwriter

workbook = xlsxwriter.Workbook('test.xlsx')
worksheet1 = workbook.add_worksheet()


# Add a format. Light red fill with dark red text.
format1 = workbook.add_format({'bg_color': '#FFC7CE',
                               'font_color': '#9C0006'})

# Add a format. Green fill with dark green text.
format2 = workbook.add_format({'bg_color': '#C6EFCE',
                               'font_color': '#006100'})


import pandas as pd

data= pd.DataFrame({'Time':['07:02:07', '15:16:55', '15:17:20', '15:28:58','15:32:28','15:38:54'],
 'Payload':['[0]->[1]', '[1]->[0]','[0]->[1]','[0]->[1]','[1]->[0]','[0]->[1]']})

caption = ('Cells with values >= 08:00:00 are in light red. '
           'Values < 50 are in light green.')

# Write the data.
worksheet1.write('A1', caption)

for row, row_data in enumerate(data):
    worksheet1.write_row(row + 2, 1, row_data)

if len (data) >0:    
    for i in range (len(data)):

        worksheet1.write('D'+str(i+5),(data['Time'].iloc[i]))
        worksheet1.write('E'+str(i+5),(data['Payload'].iloc[i]))




# Write a conditional format over a range.
worksheet1.conditional_format('D5:D12', {'type': 'cell',
                                         'criteria': '>=',
                                         'value': '08:00:00',
                                         'format': format1})

workbook.close()

приведенный выше код является лишь примером, в мой оригинальный код время является результатом предыдущих расчетов.

1 Ответ

2 голосов
/ 06 января 2020

В коде есть ряд проблем, но главная заключается в том, что значения типа '07: 02: 07 'являются строками, а не датами / временем.

Для того, чтобы они работали как раз в Excel они должны быть преобразованы в объекты даты и времени. После этого программа должна работать. Вот пример с некоторыми исправлениями:

import xlsxwriter
import datetime

workbook = xlsxwriter.Workbook('test4.xlsx')
worksheet1 = workbook.add_worksheet()


# Add a format. Light red fill with dark red text.
format1 = workbook.add_format({'bg_color': '#FFC7CE',
                               'font_color': '#9C0006'})

# Add a format. Green fill with dark green text.
format2 = workbook.add_format({'bg_color': '#C6EFCE',
                               'font_color': '#006100'})


import pandas as pd

data= pd.DataFrame({'Time': [datetime.time(7, 2, 7), datetime.time(15 ,16, 55), 
                             datetime.time(15 ,17, 20), datetime.time(15 ,28, 58), 
                             datetime.time(15 ,32, 28), datetime.time(15 ,38, 54)],
                    'Payload': ['[0]->[1]', '[1]->[0]','[0]->[1]',
                                '[0]->[1]','[1]->[0]','[0]->[1]']})

caption = ('Cells with values >= 08:00:00 are in light red. '
           'Values < 50 are in light green.')

# Write the data.
worksheet1.write('A1', caption)

for row, row_data in enumerate(data):
    worksheet1.write(row + 2, 1, row_data)

time_format = workbook.add_format({'num_format': 'hh:mm::ss'})

if len (data) >0:    
    for i in range (len(data)):

        worksheet1.write('D'+str(i+5),(data['Time'].iloc[i]), time_format)
        worksheet1.write('E'+str(i+5),(data['Payload'].iloc[i]))




# Write a conditional format over a range.
worksheet1.conditional_format('D5:D12', {'type': 'date',
                                         'criteria': '>=',
                                         'value':  datetime.time(8, 0, 0),
                                         'format': format1})

workbook.close()

Вывод:

enter image description here

...