openpyxl更新后如何向现有Excel工作表追加DataFrame且不覆盖数据
修复方案
核心原因
pandas 1.4.0及以上版本配合新版openpyxl使用追加模式(mode='a')写入Excel时,新增的if_sheet_exists参数默认值为error,只要目标工作表已存在就会抛出你遇到的报错,旧版手动绑定workbook、sheets映射的写法已经不兼容新规范。
修改后完整代码
import pandas as pd from openpyxl import load_workbook # 加载现有工作簿,计算追加的起始行 book = load_workbook(excel_path) target_sheet = book["Preço_por_quilo"] start_row = target_sheet.max_row # 直接获取工作表当前最大行数,比统计单列长度更准确 # 初始化写入器时指定overlay模式 with pd.ExcelWriter( excel_path, engine="openpyxl", mode="a", if_sheet_exists="overlay" # 核心参数:允许在已有工作表上写入,不删除原有内容 ) as writer: df.to_excel( writer, sheet_name="Preço_por_quilo", startrow=start_row, header=False, index=False )
关键改动说明
- 新增
if_sheet_exists="overlay"参数:该参数会让ExcelWriter直接在已有工作表的基础上写入内容,不会清空原有数据,也不会重复创建工作表 - 用工作表的
max_row属性计算起始行:避免原有代码统计单列长度时,列内存在空值导致行数计算错误的问题 - 改用with上下文管理器:自动处理写入器的保存、关闭操作,无需手动调用
save()和close(),避免资源泄漏 - 直接按工作表名称获取目标工作表:比按索引
book.worksheets[1]的写法更稳妥,不会因为工作表顺序调整导致逻辑出错
如果运行时提示没有if_sheet_exists参数,执行pip install -U pandas openpyxl升级依赖包到最新版本即可。
内容的提问来源于stack exchange,提问作者francescobfc
相关产品推荐
相关产品推荐

