написание и форматирование объектов datetime.date с использованием xlwt

1

У меня возникают некоторые проблемы с этим фрагментом кода

#data_list = some data
wb = xlwt.Workbook()
s = wb.add_sheet("Test Sheet")
for c, data in enumerate(data_list):
        xf=None
        if isinstance(data, datetime.time):
                xf = xlwt.easyxf(num_format_str='HH:MM:SS') #works
        elif isinstance(data, datetime.date):
                xf = xlwt.easyxf(num_format_str='MM/DD/YYYY') #doesn't work
        if xf:
                sheet.write(r+1,c,data, xf)
        else:
                sheet.write(r+1,c,data)

В выводе даты отображаются как "#####". Я могу получить excel, чтобы отформатировать их правильно, взаимодействуя с ячейкой в ​​каждом столбце, но это требует много времени. Я пробовал играть с num_format_str немного, но пока не повезло.

  • 5
    Вы уверены, что это не только потому, что ваши столбцы в Excel слишком узкие? Если столбец будет сужаться, чтобы отображать всю дату, он будет отображаться как "#######".
  • 1
    Не причина вашей проблемы, но: Звонить по xlwt.easyxf, как правило, не дешево. Сделайте это, прежде чем войти в свой цикл, где это возможно.
Показать ещё 2 комментария
Теги:
xlwt

1 ответ

5
Лучший ответ

Просто подумайте об этом, если ваша проблема , что столбцы слишком узкие, вы можете исправить ее, указав ширину столбца явно в script.

for c, data in enumerate(data_list):
    xf=None
    sheet.col(c).width = len(str(data))*256 
    if isinstance(data, datetime.time):

Ширина в xlwt задается в единицах 1/256 ширины символа 0 в шрифте по умолчанию.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню