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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 07:06:04