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

使用openpyxl复制Excel数据时目标文件原有数据丢失求助

问题原因分析

你提供的代码逻辑并不是追加数据,而是从目标工作表的第1行第1列开始覆盖写入,这直接导致目标文件原有数据的前N行(N等于源文件行数)被替换——如果源文件对应位置的单元格是空值,就会把目标文件的对应单元格清空,这就是你看到原有数据变成空白的原因。

解决方案

要实现“将源文件数据追加到目标文件已有数据之后”的需求,核心是先获取目标工作表已有的总行数,然后从该行的下一行开始写入源数据,而不是从第1行开始。

修改后的代码如下:

import openpyxl as xl

# 打开源excel文件
filename = "path_to_source_file"
wb1 = xl.load_workbook(filename)
ws1 = wb1.worksheets[0]

# 打开目标excel文件
filename1 = "path_to_destination_file"
wb2 = xl.load_workbook(filename1)
ws2 = wb2.active

# 获取源文件的总行数、总列数
mr = ws1.max_row
mc = ws1.max_column

# 获取目标文件已有数据的最后一行,追加从下一行开始
start_row = ws2.max_row + 1

# 复制源文件数据到目标文件的追加位置
for i in range(1, mr + 1):
    for j in range(1, mc + 1):
        c = ws1.cell(row=i, column=j)
        # 可选:如果不想把空值写入目标文件,避免清空原有单元格,可以加判断
        # if c.value is not None:
        ws2.cell(row=start_row + i - 1, column=j).value = c.value

# 保存目标文件
wb2.save(filename1)
关键改动说明
  • 新增start_row = ws2.max_row + 1:确定追加数据的起始行,确保不会覆盖目标文件原有内容
  • 写入目标单元格时,行号改为start_row + i - 1:把源文件的第i行,对应写入目标文件的start_row + i - 1行(比如目标原有10行,start_row是11,源第1行就写到目标第11行)
  • 可选判断if c.value is not None:如果源文件存在空白单元格,不想让这些空白覆盖目标文件可能存在的内容,可以启用这个判断,只写入非空值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 05:50:27