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])
Другие вопросы по тегам