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

如何用pandas的ExcelWriter()在Excel中新增数据不覆盖原有数据

解决Pandas向Excel工作表新增数据不覆盖原有内容的问题

你的代码目前会直接覆盖整个Excel文件,因为xlsxwriter引擎的ExcelWriter默认是创建新文件或覆盖原有文件,无法直接向已有工作表追加数据。要实现新增数据且保留原有内容,推荐两种常用方法:

方法一:读取原有数据合并后写入

适合数据量不大的场景,逻辑简单易维护:

import pandas as pd
from os.path import exists

file_path = r'D:\Projects\MOJ\MOJ.xlsx'
sheet_name = 'Sheet1'

# 获取表单提交的新数据
serial_num = request.form.get("serialNumberFromSheet_htmlName")
new_data = pd.DataFrame({'Serial Number': [serial_num]})

# 合并原有数据与新数据
if exists(file_path):
    existing_data = pd.read_excel(file_path, sheet_name=sheet_name)
    combined_data = pd.concat([existing_data, new_data], ignore_index=True)
else:
    combined_data = new_data

# 写入Excel(覆盖原文件,但内容是原有+新数据)
combined_data.to_excel(file_path, sheet_name=sheet_name, index=False)

说明:先读取原有数据,和新数据合并后整体写入,相当于间接实现“追加”,能自动保留表头和原有内容。

方法二:用Openpyxl引擎直接追加行

适合大数据量场景,无需读取全部原有数据:
首先确保安装openpyxl依赖:

pip install openpyxl

然后使用以下代码:

import pandas as pd
from os.path import exists

file_path = r'D:\Projects\MOJ\MOJ.xlsx'
sheet_name = 'Sheet1'

# 获取新数据
serial_num = request.form.get("serialNumberFromSheet_htmlName")
new_data = pd.DataFrame({'Serial Number': [serial_num]})

if exists(file_path):
    # 以追加模式打开Excel,指定覆盖已有工作表
    with pd.ExcelWriter(file_path, engine='openpyxl', mode='a', if_sheet_exists='overlay') as writer:
        # 获取工作表最后一行的行号
        target_sheet = writer.sheets[sheet_name]
        start_row = target_sheet.max_row
        # 写入新数据,不重复写表头
        new_data.to_excel(writer, sheet_name=sheet_name, startrow=start_row, index=False, header=False)
else:
    # 文件不存在时直接写入
    new_data.to_excel(file_path, sheet_name=sheet_name, index=False)

说明:利用openpyxl的追加模式,定位到已有数据的下一行写入新内容,避免了读取全量数据的开销。

内容的提问来源于stack exchange,提问作者Nour Eldin Megahed

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 02:55:46