You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:23:20