如何使用 Pandas ExcelWriter 将空工作表添加到现有工作簿中

How to add an empty Worksheet into an existing Workbook using Pandas ExcelWriter

我正在尝试使用 python xlsxwriter 添加一个空的 excel sheet 到现有的 Excel 文件中。

按如下方式设置公式效果很好。

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

但是一旦我尝试将带有数据帧的 sheets 添加到 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') 

我应该如何编写代码,以便我可以将空 sheet 和现有数据帧添加到现有 excel 文件中。

或者,一旦我生成了 Excel 文件,回答如何切换引擎会很有帮助...

感谢您的帮助!

您可以使用 pandas.ExcelWriter 和可选的 mode='a' 参数来附加到现有的 Excel 工作簿。

You can also append to an existing Excel file:

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

然而不幸的是, 这需要使用不同的引擎,因为正如您所观察到的 ExcelWriter 不支持可选的 mode='a'(追加)。如果您尝试将此参数传递给构造函数,it raises an error.

因此您需要使用不同的引擎来执行追加,例如 openpyxl。您需要确保已安装该软件包,否则您将收到 "Module Not Found" 错误。我已经使用 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') 

如果您没有被迫使用 xlsxwriter,请尝试使用 openpyxl. Simply pass 'openpyxl' as the Engine for the pandas built-in ExcelWriter class. I had asked a question a while back on 。这是有用的代码。它适用于 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()