如何用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'(追加模式),因此必须切换到openpyxlif_sheet_exists='overlay'的作用是覆盖指定位置的单元格,而非插入行,这就是你出现数据覆盖的核心原因
内容的提问来源于stack exchange,提问作者cmg42
相关产品推荐
相关产品推荐

