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

如何用openpyxl记录Excel比对中未匹配的行?

基于openpyxl实现Excel匹配项与未匹配项的完整记录

核心修改思路

  1. 预提取目标数据到集合:先把Azure-Scrape.xlsx中用于比对的列(比如A列)所有值提取到一个集合里,集合的查找效率远高于嵌套循环,能大幅提升处理速度。
  2. 遍历并区分匹配状态:遍历Azure-Provider-description.xlsx的每一行,检查该行目标值是否在Scrape的集合中:
    • 匹配项:按原有逻辑记录到Azure-Actions.xlsx
    • 未匹配项:新增状态标注,同时保留原行关键信息

修改后的代码示例

假设你是比对两表的A列内容,以下是完整可运行的代码:

from openpyxl import load_workbook, Workbook

# 加载三个工作簿
wb_desc = load_workbook('Azure-Provider-description.xlsx')
ws_desc = wb_desc.active

wb_scrape = load_workbook('Azure-Scrape.xlsx')
ws_scrape = wb_scrape.active

wb_actions = Workbook()
ws_actions = wb_actions.active

# 写入表头(可根据实际需求调整列名)
ws_actions.append(['原行号', '原比对内容', '匹配状态', '匹配结果'])

# 提取Scrape表中用于比对的所有值到集合(跳过空值)
scrape_targets = set()
for row in ws_scrape.iter_rows(min_row=2, values_only=True):
    if row[0] is not None:
        scrape_targets.add(row[0])

# 遍历Description表的每一行,分别处理匹配与未匹配情况
for row_idx, row in enumerate(ws_desc.iter_rows(min_row=2, values_only=True), start=2):
    target_val = row[0]
    # 先组装原行基础信息
    record = [row_idx, target_val]
    
    if target_val in scrape_targets:
        # 匹配项:按原有逻辑记录结果
        record.extend(['已匹配', target_val])
    else:
        # 未匹配项:标注状态,可按需补充原行其他列内容
        record.extend(['未匹配', '无对应匹配项'])
    
    ws_actions.append(record)

# 保存最终结果
wb_actions.save('Azure-Actions.xlsx')

关键修改点说明

  • 用scrape_targets集合替代嵌套循环查找,避免重复遍历Scrape表,处理大文件时效率提升明显
  • 新增匹配状态列,清晰区分已匹配和未匹配的行,方便后续筛选
  • 保留原行号和原比对内容,便于快速溯源到原始数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 10:10:17