获取 AttributeError 'Workbook' 对象没有属性 'add_worksheet' - 将数据帧写入 excel sheet

Getting AttributeError 'Workbook' object has no attribute 'add_worksheet' - while writing data frame to excel sheet

我有以下代码,我正在尝试将数据帧写入 Excel 文件(此处称为 test.xlsx)的“现有”作品sheet。 Sheet3 是我要放置数据的目标 sheet,我不想用新的替换整个 sheet。

df = pd.DataFrame({'Data': [10, 20, 30, 20, 15, 30, 45]})
book = load_workbook('test.xlsx')
writer = pd.ExcelWriter('test.xlsx')
writer.book = book
writer.sheets = dict((ws.title, ws) for ws in book.worksheets) # *I am not sure what is happening in this line*
df.to_excel(writer,"Sheet3",startcol=0, startrow=20)

当我逐行 运行 代码时,最后一行出现此错误:

AttributeError:'Workbook' 对象没有属性 'add_worksheet'。现在,当我不尝试添加工作时,为什么会看到此错误sheet?

注意:我知道这个类似的问题 Python How to use ExcelWriter to write into an existing worksheet 但它对我不起作用,我也无法对此发表评论 post。

您可以在创建 pd.ExcelWriter 的实例时使用 openpyxl 作为引擎。

import pandas as pd
import openpyxl

df1 = pd.DataFrame({'A':[1, 2, -3],'B':[1,2,6]})
book = openpyxl.load_workbook('examples/ex1.xlsx') #Already existing workbook
writer = pd.ExcelWriter('examples/ex1.xlsx', engine='openpyxl') #Using openpyxl

#Migrating the already existing worksheets to writer
writer.book = book
writer.sheets = {x.title: x for x in book.worksheets}

df1.to_excel(writer, sheet_name='sheet4')
writer.save()

希望这对你有用。

您可以使用 append_df_to_excel() 辅助函数,即 :

用法:

append_df_to_excel('test.xlsx', df, sheet_name="Sheet3", startcol=0, startrow=20)

一些细节:

**to_excel_kwargs - 用于将额外的 named 参数传递给 df.to_excel() 就像我在上面的示例中所做的那样 - 参数 startcolappend_df_to_excel() 未知,因此它将被视为 **to_excel_kwargs 参数(字典)的一部分。

writer.sheets = {ws.title:ws for ws in writer.book.worksheets} 用于将现有工作表复制到 writer openpyxl 对象。我无法解释为什么在阅读 writer = pd.ExcelWriter(filename, engine='openpyxl') 时它没有自动完成 - 你应该询问 openpyxl 模块的作者......

openpyxl 支持 Pandas 数据帧,因此您最好直接使用它。有关详细信息,请参阅 http://openpyxl.readthedocs.io/en/latest/pandas.html

基于https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.to_excel.html

这对我有用(pandas 版本 1.3.5)

import pandas as pd
df1 = pd.DataFrame({'a':[0,1,2], 'b':[1,2,3],'c':[2,3,4]})
df2 = pd.DataFrame({'aa':[10,11,12], 'bb':[11,12,13],'cc':[12,13,14]})

with pd.ExcelWriter('test.xlsx') as writer:
    for i, df in enumerate([df1, df2]):
        df.to_excel(writer,sheet_name=f'sheet_{i}', index=False)