Как я могу использовать xlsxwriter и Excelwriter вместе, чтобы заполнить файл Excel, который содержит некоторый форматированный текст, а также экспортированный в Python DataFrame? - PullRequest
0 голосов
/ 07 июля 2019

Я пишу программу на python, которая будет работать с набором данных CSV. Цель кода - экспортировать агрегированный вывод в формате Excel вместе с жестко закодированной информацией заголовка. Файл Excel представляет собой окончательный отчет, который отправляется клиенту; означает полный и окончательный (как показано на рисунке ниже). enter image description here

Вот как я начинаю: Сначала я создал типовой заголовок отчета с помощью xlsxwriter, а затем попытался экспортировать итоговый DataFrame (т.е. вывод основной таблицы) под заголовком с помощью Excelwriter- DataFrame.to_excel

Но как только я вставляю DataFrame в шаблон Excel, который я создал на предыдущем шаге, изначально созданный заголовок стирается, ячейки становятся пустыми. И только DataFrame (вывод таблицы) отображается.

enter image description here

В качестве альтернативы, если я сначала экспортирую dataFrame в Excel, а затем попытаюсь добавить заголовок в отчет Excel, заголовок останется, но DataFrame ушел. enter image description here

Что я должен сделать, чтобы сохранить оба; датафрейм (вывод таблицы) и информация заголовка? Я использовал xlsxwritter, превосходный писатель панд.

Ниже приведены несколько строк кодов, которые могут быть важны для объяснения истории.

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

    workbook = writer.book
    WS_I = workbook.add_worksheet('I')

    with ExcelWriter('SampleReport_1.xlsx') as writer:
        dfI.to_excel(writer, sheet_name='I', header=True, index=True, startrow=9, startcol=0, engine=xlsxwriter, merge_cells=True)
    writer.save()

    cell_format1 = workbook.add_format()
    cell_format1.set_bold()

    for worksheet in workbook.worksheets():
        worksheet.write('A1', 'Exhibit', cell_format1)
    workbook.close()

Ответы [ 2 ]

0 голосов
/ 14 июля 2019

Я нашел следующее решение:

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

workbook = writer.book
WS_I = workbook.add_worksheet('I')
cell_format1 = workbook.add_format()
cell_format1.set_bold()

for worksheet in workbook.worksheets():
    worksheet.write('A1', 'Exhibit', cell_format1)
workbook.close()
WS_I.add_table('A3:G6', {'data': dfI_new.values.tolist(),'header_row': True})
0 голосов
/ 07 июля 2019

Думаю, теперь я понял, в чем проблема.Я попробовал следующий подход на примере листа Excel с предварительно существующим заголовком, и он сработал:

Сначала - сохраните ваш фрейм данных в csv

SampleReport_1_csv = df.to_csv (r'C:\Users\[your path]\SampleReport_1.csv', index = None, header=True) 

Затем откройте лист Excel с предварительно отформатированным заголовком и(в зависимости от вашей версии Excel) импортируйте CSV-файл, перейдя в «data / get external data / from text».Важно отметить, что на последнем шаге импорта Excel запросит ячейку, в которую должен быть импортирован файл csv, - убедитесь, что эта ячейка находится под предварительно отформатированным блоком (я думаю, что это ячейка A10, в вашем случае).

Дайте мне знать, если это работает.

...