Как добавить пустую рабочую таблицу в существующую рабочую книгу с помощью Pandas ExcelWriter - PullRequest
2 голосов
/ 07 июня 2019

Я пытаюсь добавить пустой лист Excel в существующий файл Excel, используя python xlsxwriter.

Хорошо работает настройка формулы следующим образом.

workbook = xlsxwriter.Workbook(file_name)
worksheet_cover = workbook.add_worksheet("Cover")
Output4 = workbook
Output4.close()

Но как только я пытаюсьдобавьте дополнительные листы с фреймами данных в Excel, который переписывает предыдущий Excel:

with pd.ExcelWriter('Luther_April_Output4.xlsx') as writer:
    data_DifferingRates.to_excel(writer, sheet_name='Differing Rates')
    data_DifferingMonthorYear.to_excel(writer, sheet_name='Differing Month or Year')
    data_DoubleEntries.to_excel(writer, sheet_name='Double Entries') 

Как мне написать код, чтобы я мог добавить пустые листы и существующие фреймы данных в существующий файл Excel.

В качестве альтернативы было бы полезно ответить на вопрос о том, как переключать движки, как только я создаю файл Excel ...

Спасибо за любую помощь!

Ответы [ 2 ]

0 голосов
/ 07 июня 2019

Если вы не вынуждены использовать xlsxwriter, попробуйте использовать openpyxl.Просто передайте 'openpyxl' как Engine для встроенного класса pandas ExcelWriter.Я задал вопрос некоторое время назад на , почему это работает .Это полезный код.Он хорошо работает с синтаксисом pd.to_excel() и не перезаписывает ваши уже существующие листы.

from openpyxl import load_workbook
import pandas as pd

book = load_workbook(file_name)
writer = pd.ExcelWriter(file_name, engine='openpyxl')
writer.book = book
data_DifferingRates.to_excel(writer, sheet_name='Differing Rates')
data_DifferingMonthorYear.to_excel(writer, sheet_name='Differing Month or Year')
data_DoubleEntries.to_excel(writer, sheet_name='Double Entries') 

writer.save()
0 голосов
/ 07 июня 2019

Вы можете использовать pandas.ExcelWriter с необязательным аргументом mode='a' для добавления к существующей книге Excel.

Вы также можете добавить к существующему файлу Excel:

>>> with ExcelWriter('path_to_file.xlsx', mode='a') as writer:`
...     df.to_excel(writer, sheet_name='Sheet3')`

Однако, к сожалению, требует использования другого механизма, поскольку, как вы заметили, ExcelWriter не поддерживает опциональный mode='a' (добавление). Если вы попытаетесь передать этот параметр конструктору, выдает ошибку .

Таким образом, для добавления вам понадобится другой движок, например openpyxl . Вам нужно убедиться, что пакет установлен, иначе вы получите ошибку «Модуль не найден». Я проверил, используя openpyxl в качестве движка, и он может добавить новый лист к существующей книге:

with pd.ExcelWriter(engine='openpyxl', path='Luther_April_Output4.xlsx', mode='a') as writer:
    data_DifferingRates.to_excel(writer, sheet_name='Differing Rates')
    data_DifferingMonthorYear.to_excel(writer, sheet_name='Differing Month or Year')
    data_DoubleEntries.to_excel(writer, sheet_name='Double Entries') 
...