Pandas Excel 将 Openpyxl 与现有工作簿结合使用的作者
Pandas Excel Writer using Openpyxl with existing workbook
我有一段时间以前的代码,我正在为一项新任务重新使用这些代码。任务是将新的 DataFrame 写入新的 sheet,写入现有的 excel 文件。但是有一部分代码我不明白,但它只是使代码 "work".
工作:
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 文件将删除所有其他 sheet,除了 df1.to_excel
中 sheetname=
参数中使用的 sheet。
我查看了 xlsxwriter
's documentation as well as openpyxl
's,但似乎无法弄清楚 为什么 该行给出了我预期的输出。有什么想法吗?
编辑:我相信 this post 是我最初想法的来源。
在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])
我有一段时间以前的代码,我正在为一项新任务重新使用这些代码。任务是将新的 DataFrame 写入新的 sheet,写入现有的 excel 文件。但是有一部分代码我不明白,但它只是使代码 "work".
工作:
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 文件将删除所有其他 sheet,除了 df1.to_excel
中 sheetname=
参数中使用的 sheet。
我查看了 xlsxwriter
's documentation as well as openpyxl
's,但似乎无法弄清楚 为什么 该行给出了我预期的输出。有什么想法吗?
编辑:我相信 this post 是我最初想法的来源。
在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])