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

如何用Pandas的read_excel/to_excel不覆盖数据写入Excel?含新Sheet方案

嘿,我来帮你搞定这个Excel写入的问题!

首先得明确:Excel确实没有像to_csv("file.csv", "a")那样一键追加到同一张工作表的简单选项,但我们可以通过两种思路实现你的需求——要么追加数据到现有工作表的末尾,要么添加全新的工作表来存放新数据,下面给你详细说明:

方案1:追加数据到现有工作表末尾

这个思路需要先读取现有Excel里的目标工作表,找到数据的最后一行,再把新的DataFrame从该行开始写入,用openpyxl作为引擎就能实现:

import pandas as pd
from openpyxl import load_workbook

# 你的新数据DataFrame
new_df = pd.DataFrame({'col1': [1,2,3], 'col2': [4,5,6]})

file_path = "model.xlsx"
# 加载现有的Excel文件
book = load_workbook(file_path)

# 初始化ExcelWriter,关键参数:mode='a'(追加)、if_sheet_exists='overlay'(覆盖指定工作表的内容,这里用来追加)
writer = pd.ExcelWriter(file_path, engine='openpyxl', mode='a', if_sheet_exists='overlay')
# 把加载的book赋值给writer,这步很容易忘!
writer.book = book

# 找到目标工作表的最后一行
target_sheet = 'Sheet1'  # 替换成你要追加的工作表名称
if target_sheet in writer.sheets:
    ws = writer.sheets[target_sheet]
    start_row = ws.max_row
else:
    # 如果工作表不存在,就从第0行开始写(相当于新建工作表并写入)
    start_row = 0

# 写入新数据,header=False是因为原有工作表已经有表头了,根据实际情况调整
new_df.to_excel(writer, sheet_name=target_sheet, startrow=start_row, header=False, index=False)

# 保存并关闭
writer.close()

⚠️ 注意:if_sheet_exists='overlay'是Pandas 1.4.0及以上版本才支持的参数,如果你的Pandas版本太低,记得先升级(pip install --upgrade pandas)。

方案2:添加新工作表写入数据(不覆盖原有内容)

如果不需要追加到同一张表,而是新增工作表存放新数据,这个更简单,直接用mode='a'模式打开ExcelWriter,指定新的工作表名称即可:

import pandas as pd

new_df = pd.DataFrame({'col1': [7,8,9], 'col2': [10,11,12]})

# 用mode='a'追加模式,指定新的工作表名称
with pd.ExcelWriter("model.xlsx", engine='openpyxl', mode='a') as writer:
    # 替换成你想要的工作表名称,注意不能和现有表重名,否则会报错
    new_df.to_excel(writer, sheet_name='新数据_20240520', index=False)

如果担心工作表重名,可以先检查一下:

from openpyxl import load_workbook

book = load_workbook("model.xlsx")
new_sheet_name = '新数据_20240520'
if new_sheet_name not in book.sheetnames:
    # 执行上面的写入操作
    with pd.ExcelWriter("model.xlsx", engine='openpyxl', mode='a') as writer:
        new_df.to_excel(writer, sheet_name=new_sheet_name, index=False)
else:
    print(f"工作表{new_sheet_name}已经存在啦!")
关于你说的openpyxl方案未生效的可能原因

你之前尝试的openpyxl方案没生效,大概率是这几个问题:

  • 没加mode='a'参数:默认是mode='w',会直接覆盖整个Excel文件
  • 忘记把加载的book赋值给writer.book:这会导致writer无法识别现有文件的内容
  • Pandas版本太低,不支持if_sheet_exists等关键参数
  • 工作表名称写错了,或者目标工作表根本不存在

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:16:13