Python实现两个Excel表列值校验及匹配后关联填充数据
双Excel表匹配填充实现方案
方案1:Pandas实现(推荐,代码量少效率高)
import pandas as pd # 读取两个表格,默认取前两列,可根据实际结构调整usecols参数 df1 = pd.read_excel('table_one.xlsx', usecols=[0,1]) df2 = pd.read_excel('table_two.xlsx', usecols=[0,1]) # 生成映射字典:key为第一张表第一列的值,value为对应第二列的值 map_dict = df1.set_index(df1.columns[0])[df1.columns[1]].to_dict() # 给第二张表新增第三列,表头可自定义,这里示例为Column3 df2['Column3'] = df2[df2.columns[0]].map(map_dict) # 输出结果到新文件,不建议直接覆盖原文件 df2.to_excel('result.xlsx', index=False)
方案2:Openpyxl实现(适配你原有代码的修正版)
你之前的代码问题在于字典存储逻辑错误,没有建立第一张表两列的映射关系,修正后代码如下:
import openpyxl as xl map_dict = {} # 读取第一张表构造映射字典 wb1 = xl.load_workbook("D:\\data1.xlsx") ws1 = wb1.worksheets[0] data1_max_row = ws1.max_row # 从第2行开始遍历,跳过表头,可根据实际表头行调整起始值 for i in range(2, data1_max_row + 1): key = ws1.cell(i, 1).value val = ws1.cell(i, 2).value map_dict[key] = val # 读取第二张表填充第三列 wb2 = xl.load_workbook("D:\\data2.xlsx") ws2 = wb2.active data2_max_row = ws2.max_row # 新增第三列表头 ws2.cell(1, 3).value = "Column3" # 逐行匹配 for i in range(2, data2_max_row + 1): current_val = ws2.cell(i, 1).value ws2.cell(i, 3).value = map_dict.get(current_val, "") # 保存结果 wb2.save("D:\\result.xlsx")
注意事项
- 如果表格表头不是第一行,调整读取/遍历的起始行号即可
- 如果匹配列、取值列不是前两列,调整对应列索引即可
- 建议运行代码前备份原文件,避免数据丢失
内容的提问来源于stack exchange,提问作者bardukiss
相关产品推荐
相关产品推荐

