Pandas Excel Writer, использующий Openpyxl с существующей книгой
Некоторое время назад у меня был код, который я повторно использую для новой задачи. Задача состоит в том, чтобы записать новый DataFrame на новый лист, в существующий файл Excel. Но есть одна часть кода, которую я не понимаю, но она просто заставляет код "работать".
за работой:
from openpyxl import load_workbook
import pandas as pd
file = r'YOUR_PATH_TO_EXCEL_HERE'
df1 = pd.DataFrame({'Data': [10, 20, 30, 20, 15, 30, 45]})
book = load_workbook(file)
writer = pd.ExcelWriter(file, engine='openpyxl')
writer.book = book # <---------------------------- piece i do not understand
df1.to_excel(writer, sheet_name='New', index=None)
writer.save()
Маленькая линия writer.book=book
поставил меня в тупик. Без этого куска кода файл Excel удалит все остальные листы, кроме листа, используемого в sheetname=
параметр в df1.to_excel
,
я смотрел на xlsxwriter
документация, а также openpyxl
Да, но не могу понять, почему эта строка дает мне ожидаемый результат. Есть идеи?
редактировать: я считаю, что этот пост, откуда я взял оригинальную идею.
1 ответ
В исходном коде ExcelWriter с openpyxl он инициализирует пустую книгу и удаляет все листы. Вот почему вам нужно добавить это явно
class _OpenpyxlWriter(ExcelWriter):
engine = 'openpyxl'
supported_extensions = ('.xlsx', '.xlsm')
def __init__(self, path, engine=None, **engine_kwargs):
# Use the openpyxl module as the Excel writer.
from openpyxl.workbook import Workbook
super(_OpenpyxlWriter, self).__init__(path, **engine_kwargs)
# Create workbook object with default optimized_write=True.
self.book = Workbook()
# Openpyxl 1.6.1 adds a dummy sheet. We remove it.
if self.book.worksheets:
try:
self.book.remove(self.book.worksheets[0])
except AttributeError:
# compat
self.book.remove_sheet(self.book.worksheets[0])