Проблема форматирования пользовательских столбцов в Xlsxwriter - PullRequest
1 голос
/ 23 апреля 2020

Я уверен, что есть более эффективный способ написания кода, но проблема, с которой я сталкиваюсь, заключается в моем кадре данных 2 моих столбцов (dtypes - это объекты, которые представляют даты в формате гггг-мм-дд). Когда я использую xlsxWriter, все остальное получается именно так, как мне нужно, за исключением двух столбцов с датами, которые являются «настраиваемыми» типами столбцов в Excel и не отформатированы (выровняйте по вертикали и размер 8). Остальные столбцы в Excel являются «общими», и форматирование правильное. Любые предложения будут с благодарностью

writer=pd.ExcelWriter("file.xlsx", engine='xlsxwriter')
df_summary.to_excel(writer, (sheet_name)='Sheet1', startrow=15, header=True, index=False)

workbook=writer.book
worksheet=writer.sheets['Sheet1']
worksheet.set_column('A:O', 15)  
worksheet.set_column('P:R', 30) 
workbook.formats[0].set_font_size(8)  
workbook.formats[0].set_text_wrap() 
workbook.formats[0].set_align('top') 
bg_format=workbook.add_format({'bg_color': '#cccccc'})
worksheet.set_row(15, cell_format=(bg_format))
writer.save()

1 Ответ

1 голос
/ 23 апреля 2020

Если ваши столбцы с датами являются объектами, вам сначала нужно преобразовать их в дату и время. Затем вам нужно указать формат даты по умолчанию при создании объекта записи с помощью xlsxwriter (для получения дополнительной информации посмотрите здесь ).

Вот рабочий пример, чтобы продемонстрировать это:

import pandas as pd

df = pd.DataFrame({'Date': ['04/23/2020','04/24/2020',
                            '04/25/2020','04/26/2020']})

df['Date'] = pd.to_datetime(df['Date'])

writer = pd.ExcelWriter('test.xlsx', engine='xlsxwriter',
                        datetime_format='m/d/yyyy')

df.to_excel(writer, sheet_name='Sheet1', index=False)
workbook = writer.book
worksheet = writer.sheets['Sheet1']

writer.save()

РЕДАКТИРОВАТЬ

import pandas as pd

df = pd.DataFrame({'Date': ['04/23/2020','04/24/2020',
                            '04/25/2020','04/26/2020']})

df['Date'] = pd.to_datetime(df['Date'])

writer = pd.ExcelWriter('test.xlsx', engine='xlsxwriter')

df.to_excel(writer, sheet_name='Sheet1', index=False)
workbook = writer.book
worksheet = writer.sheets['Sheet1']

cellFormat = workbook.add_format({'font_size': 8,
                            'font_name': 'Calibri',
                            'valign': 'top',
                            'align': 'left',
                            'num_format': 'm/d/yyyy'})

for row in range(1,5):
    worksheet.write(row, 0, df.iloc[row-1,0], cellFormat)

writer.save()
...