XlsxWriter записывает фрейм данных, начиная с определенной ячейки

#python #pandas #xlsxwriter

#python #pandas #xlsxwriter

Вопрос:

Я использую xlsxwriter для создания файла Excel. В настоящее время я делаю что-то вроде этого:

 import datetime
import pandas as pd
import xlsxwriter

workbook = xlsxwriter.Workbook('Test.xlsx')
worksheet = workbook.add_worksheet()

datetime_format = workbook.add_format({
    'font_size': 12
})
worksheet.write('C2', datetime.datetime.now().strftime("%Y-%m-%d %H:%M"), datetime_format)

# Rest removed for brevity. I simply have many stuff that 
# I manually write to make the design as I want.

workbook.close()

writer = pd.ExcelWriter('Test.xlsx', engine='xlsxwriter')
result.to_excel(writer, startrow=6, startcol=3) # Start from D7.
writer.save()
  

Теперь, похоже, это переписывает все, что я ранее написал вручную, используя xlsxwriter . Кроме того, я заметил, что xlsxwriter по умолчанию не поддерживается запись фреймов данных, я прав? Как я могу объединить xlsxwriter и pandas , чтобы вручную написать некоторые материалы для создания листа Excel, а затем позже записать весь материал фрейма данных, начиная с конкретной ячейки?

Ответ №1:

Вам нужно изменить положение вещей. Я бы также рекомендовал прочитать документацию XlsWritter о том, как использовать его с pandas.

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

workbook = writer.book

result.to_excel(writer, sheet_name='Sheet1', index=False, startrow=6, startcol=3) # Start from D7.

worksheet = writer.sheets['Sheet1']

datetime_format = workbook.add_format({
    'font_size': 12
})
worksheet.write('C2', datetime.datetime.now().strftime("%Y-%m-%d %H:%M"), datetime_format)

writer.save()
  

Сначала мы создаем наш объект writer, используя pd.ExcelWriter() и передавая xlswriter в качестве движка. Как только у нас будет наш writer, мы сможем получить доступ к нашей рабочей книге, используя .book класс vriable. В это время мы можем записать наши данные в нашу рабочую книгу с помощью df.to_excel() . Мы будем использовать sheet_name аргумент to_excel для создания и присвоения имени нашему рабочему листу. На этом этапе мы можем получить доступ к нашему рабочему листу, используя .sheets переменную класса и передавая наше sheetname в качестве ключа — в нашем случае Sheet1 .

Оттуда вы можете записывать дополнительные значения в свой лист с использованием объекта pandas или без него — как показано в коде ниже.