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

如何用Python xlwings在Excel循环中逐行插入数据而非覆盖

解决Excel循环写入时覆盖数据的问题

你的核心问题是每次循环都固定写入A1单元格,导致数据被覆盖。要实现逐行插入新数据,只需跟踪写入的行号,动态调整写入位置即可,以下是两种适配你现有代码的解决方案:

方案一:初始化行号逐行写入(适合空表或从头开始写)

loadfile1 = pd.read_excel(File1)
loadfile2 = pd.read_excel(File2)

l = loadfile1.values.tolist()
m = loadfile2.values.tolist()

A = wx.Book(CompFile)
sheet = A.sheets['Source']  # 提前获取工作表,避免循环内重复调用
current_row = 1  # 起始行号,从第1行开始

for row in l:
    if row in m:
        print('passed')
        # 动态生成当前行的单元格范围,覆盖row对应长度的列
        sheet.range(f'A{current_row}:{chr(64 + len(row))}{current_row}').value = row
        current_row += 1  # 行号自增,下次写入下一行

方案二:基于已有数据的最后一行写入(适合表中已有数据的场景)

如果你的Source工作表已经有数据,需要接着已有内容往下写,可以先获取已使用的最后一行行号:

loadfile1 = pd.read_excel(File1)
loadfile2 = pd.read_excel(File2)

l = loadfile1.values.tolist()
m = loadfile2.values.tolist()

A = wx.Book(CompFile)
sheet = A.sheets['Source']

# 获取已使用区域的最后一行,若无数据则从第1行开始
last_row = sheet.used_range.rows.count if sheet.used_range.rows.count > 0 else 1

for row in l:
    if row in m:
        print('passed')
        sheet.range(f'A{last_row}:{chr(64 + len(row))}{last_row}').value = row
        last_row += 1

更简洁的Pandas批量写入方案

如果不需要逐行打印状态,用Pandas批量处理效率更高,直接筛选匹配行后一次性写入:

loadfile1 = pd.read_excel(File1)
loadfile2 = pd.read_excel(File2)

# 筛选出loadfile1中存在于loadfile2的行
matched_rows = loadfile1[loadfile1.apply(lambda x: x.tolist() in loadfile2.values.tolist(), axis=1)]

# 追加写入到Excel的Source工作表
with pd.ExcelWriter(CompFile, mode='a', if_sheet_exists='overlay') as writer:
    startrow = writer.sheets['Source'].max_row  # 获取已有数据的最后一行
    matched_rows.to_excel(writer, sheet_name='Source', startrow=startrow, index=False, header=False)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 10:23:13