Комментарий : date_format = workbook.add_format({'num_format': 'dd/mm/yy'})
, показывает столбец даты в виде номера Unix, а не правильную дату.
Показанное значение примера: 42668
вместо отображения "24-10-16"
.
Это поведение по умолчанию, определенное в Windows Excel.
Чтение Excel для Windows по умолчанию сохраняет даты как количество дней
Документация: Работа XlsxWriterс датами и временем
Комментарий : ... чтобы я мог использовать соответствующий формат, основанный на имени столбца (а именно count, sale_date)
Вы можете использовать worksheet.set_column()
для установки стиля для всего столбца.
Документация: Рабочий лист XlsxWriter.set_column ()
Предварительное условие : Порядок названия / стиля столбцов должен быть синхронизирован с вашей таблицей.
Например count == 'A'
, sale_date == 'B'
и т. Д. ...
from collections import OrderedDict
_styles = OrderedDict([('count',number_format), ('sale_date', date_format), ('total', number_format), ('text', string_format)])
for col, key in enumerate(_styles):
A1_notation = '{c}:{c}'.format(c=chr(col + 65))
worksheet.set_column(A1_notation, None, _styles[key])
print("worksheet.set_column('{}', None, {})".format(A1_notation, _styles[key]))
Вывод :
worksheet.set_column('A:A', None, number_format)
worksheet.set_column('B:B', None, date_format)
worksheet.set_column('C:C', None, number_format)
worksheet.set_column('D:D', None, string_format)
Для последующих записей вам не нужно присваивать style
, например, использовать
worksheet.write('A1', 123)
по умолчанию A:A number_format
Вопрос : Могу ли я сделать это динамическим на основе имени столбца
Вы не используете "имя столбца" , она называется Ячейка A1 Обозначение .
Настройка отображения dict
, например:
style_map = {'A': number_format, 'B':date_format}
Использование :
Примечание : Это будет работать только с одной буквой, от A
до Z
def write(A1_notation, value):
worksheet1.write(A1_notation, value, style_map[A1_notation[0]])
Для строки-столбцазапись (0, 0)
:
style_map = {'0': number_format, '1':date_format}
Использование :
def write(row, col, value):
worksheet1.write(row, col, value, style_map[col])
from xlsxwriter.utility import xl_rowcol_to_cell
def write(A1_notation, value):
worksheet1.write(A1_notation, value, style_map[xl_cell_to_rowcol(A1_notation)[1]])