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

使用Pandas向Excel工作表追加数据时覆盖原有数据问题求助

解决方法

问题根源

  • pd.ExcelWriter默认使用mode='w'写入模式,会直接覆盖原有文件全部内容,是原有数据丢失的核心原因
  • 写死startrow=2不符合追加逻辑,需要动态获取目标工作表现有数据的行数确定起始写入位置

修正后代码(适用于pandas ≥1.4.0)

import pandas as pd
from openpyxl import load_workbook

# 加载已有Excel文件,设置追加模式
book = load_workbook('Total_Orders.xlsx')
writer = pd.ExcelWriter(
    'Total_Orders.xlsx',
    engine='openpyxl',
    mode='a',
    if_sheet_exists='overlay'
)
writer.book = book

# 动态获取目标工作表最大行数,作为新数据写入起始位置
target_sheet = writer.sheets['Orders']
start_row = target_sheet.max_row

# 写入新数据,不添加表头、不保留索引
append_data.to_excel(
    writer,
    sheet_name='Orders',
    startrow=start_row,
    header=False,
    index=False
)

writer.save()
writer.close()

低版本pandas兼容方案(pandas <1.4.0)

如果pandas版本不支持if_sheet_exists参数,可采用新旧数据合并后全量写入的方式,10万行数据量下性能更稳定:

import pandas as pd

# 读取原有工作表数据
old_data = pd.read_excel('Total_Orders.xlsx', sheet_name='Orders')
# 合并新旧数据
all_data = pd.concat([old_data, append_data], ignore_index=True)
# 全量写入工作表
with pd.ExcelWriter('Total_Orders.xlsx', engine='openpyxl') as writer:
    all_data.to_excel(writer, sheet_name='Orders', index=False)

额外注意

你读取Orders.xlsx的代码存在两处可修正问题:

  • pd_ExcelFile应改为pd.ExcelFile
  • 需要提前初始化append_data = [],并定义worksheets = sheet_file.sheet_names获取工作表列表,否则运行会报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 16:39:01