如何用Pandas向现有Excel文件添加工作表?解决AttributeError报错
解决AttributeError: 'Workbook' object has no attribute 'add_worksheet'问题
这个报错的根源在于你混用了不同的Excel处理引擎:你用openpyxl加载了现有的test.xlsx工作簿,但pd.ExcelWriter默认使用的是xlsxwriter引擎——这两个引擎的Workbook对象结构不兼容,导致Pandas在尝试添加新工作表时找不到对应的方法。
修复方案
只需要在创建ExcelWriter实例时显式指定engine='openpyxl',让Pandas使用和你加载工作簿相同的引擎即可。修改后的完整代码如下:
import pandas as pd from openpyxl import load_workbook # 加载已有的Excel工作簿 book = load_workbook('test.xlsx') # 创建ExcelWriter时指定openpyxl引擎 writer = pd.ExcelWriter('test.xlsx', engine='openpyxl') # 关联已加载的工作簿和工作表 writer.book = book writer.sheets = {ws.title: ws for ws in book.worksheets} # 准备要写入的数据 df = pd.DataFrame({'a':[1,3,5,7,4,5,6,4,7,8,9], 'b':[3,5,6,2,4,6,7,8,7,8,9]}) # 将数据写入新工作表 df.to_excel(writer, sheet_name='tab_name', index=False) # 保存并释放资源 writer.save() writer.close()
更简洁的写法(推荐)
从Pandas 1.2.0版本开始,使用openpyxl引擎时支持mode='a'(追加模式),不需要手动加载工作簿和关联工作表,Pandas会自动处理现有文件的追加操作,代码更简洁且不易出错:
import pandas as pd df = pd.DataFrame({'a':[1,3,5,7,4,5,6,4,7,8,9], 'b':[3,5,6,2,4,6,7,8,7,8,9]}) # 用with语句自动管理资源,指定追加模式和openpyxl引擎 with pd.ExcelWriter('test.xlsx', engine='openpyxl', mode='a') as writer: df.to_excel(writer, sheet_name='tab_name', index=False)
注意事项
- 确保已经安装了
openpyxl包,若未安装可执行命令:pip install openpyxl - 如果你的Excel文件是
.xls格式(旧版Excel),则需要使用xlrd和xlwt引擎,不过这类格式现在已经很少用了。
内容的提问来源于stack exchange,提问作者cat
相关产品推荐
相关产品推荐

