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

使用pandas和openpyxl追加Excel数据时遇AttributeError错误

解决AttributeError: 'OpenpyxlWriter' object has no setter for property 'book'

问题原因

在pandas 2.0+版本中,使用pd.ExcelWriter的mode='a'(追加模式)时,框架会自动加载目标Excel文件的工作簿,不再允许手动设置writer.book属性——该属性已改为只读,因此直接赋值会触发上述错误。此外你的代码中openpyxl.load_workbook的参数格式也存在错误。

修正方案

  1. 删除手动设置writer.book = book的代码:pandas会自动处理工作簿加载
  2. 修正openpyxl.load_workbook的参数位置:data_only=True是函数参数,不应放在format的占位符里
  3. 确保if_sheet_exists='overlay'参数正确生效:该参数会让新数据覆盖工作表中已有内容的对应单元格,实现追加/更新效果

修正后的代码片段

# 修正load_workbook的参数格式
book = openpyxl.load_workbook(
    r'D:\Anto\Daily Work\Daily Reservoir Level\August\Plotting\Excel\{}.xlsx'.format(my_list[j]),
    data_only=True
)
# 初始化ExcelWriter,无需手动设置book
writer = pd.ExcelWriter(
    r'D:\Anto\Daily Work\Daily Reservoir Level\August\Plotting\Excel\{}.xlsx'.format(my_list[j]),
    engine='openpyxl',
    mode='a',
    if_sheet_exists='overlay'
)
# 后续写入数据的示例(替换为你的实际数据写入逻辑)
df.to_excel(writer, sheet_name='目标工作表名', index=False)
# 务必保存并关闭writer
writer.close()

额外说明

  • 旧代码能运行是因为pandas旧版本允许手动设置book属性,但2.0+版本重构了ExcelWriter的逻辑,废弃了该写法
  • 使用mode='a'时,若目标文件不存在,pandas会自动创建;若存在则加载已有工作簿
  • if_sheet_exists='overlay'适合在已有工作表中更新数据,若要新增工作表可改为if_sheet_exists='new'

内容的提问来源于stack exchange,提问作者anto majo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 04:35:06