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

如何用Python将CSV数据插入Excel现有数据上方且不覆盖?

解决方案:实现CSV数据插入到Excel表头下方现有数据上方

要实现类似Excel「Insert Copied Cells」的插入行为,你需要先在Excel中插入足够的空行,再写入CSV数据,而非直接覆盖单元格。下面提供两种可行方案:

方法一:使用openpyxl直接操作(保留Excel原有格式)

openpyxl可直接操作Excel的行插入,完美复刻Excel的插入逻辑,适合需要保留原有单元格格式、公式的场景:

import csv
from openpyxl import load_workbook

# 读取CSV文件,跳过第一行表头
csv_rows = []
with open("data.csv", "r", encoding="utf-8") as f:
    reader = csv.reader(f)
    next(reader)  # 跳过CSV第一行
    for row in reader:
        csv_rows.append(row)

# 打开目标Excel文件
wb = load_workbook("output.xlsx")
ws = wb["Sheet1"]

# 在表头下方(第2行)插入对应数量的空行
# openpyxl行索引从1开始,插入位置为2,插入行数等于CSV数据行数
ws.insert_rows(idx=2, amount=len(csv_rows))

# 将CSV数据写入插入的空行
for row_idx, row_data in enumerate(csv_rows, start=2):
    for col_idx, cell_value in enumerate(row_data, start=1):
        ws.cell(row=row_idx, column=col_idx, value=cell_value)

# 保存文件
wb.save("output.xlsx")

方法二:结合pandas+openpyxl(数据优先,无需保留格式)

如果不需要保留Excel原有格式,可通过pandas合并数据后重新写入,操作更简洁:

import pandas as pd

# 读取CSV,跳过第一行
df_csv = pd.read_csv("data.csv", skiprows=1)

# 读取现有Excel数据(保留表头)
df_excel = pd.read_excel("output.xlsx", sheet_name="Sheet1")

# 合并数据:CSV数据在前,原有数据在后
df_combined = pd.concat([df_csv, df_excel], ignore_index=True)

# 将合并后的数据写入Excel,覆盖原文件
df_combined.to_excel("output.xlsx", sheet_name="Sheet1", index=False)

你之前遇到的问题说明

  • xlsxwriter引擎不支持mode='a'(追加模式),因此必须切换到openpyxl
  • if_sheet_exists='overlay'的作用是覆盖指定位置的单元格,而非插入行,这就是你出现数据覆盖的核心原因

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 11:22:52