Excel 多表数据模糊查询匹配,并提取对应数据到原始表

老虎说测试 脚本开发字数 1861阅读6分12秒阅读模式
摘要现在有这么个需求,有两个Excel数据表格,没有唯一的字段进行关联,基本确定的规则是,在第一个数据表格中,有两列数据,在第二个数据表格中的描述列包含其信息,也就是第二个表格中的描述...

现在有这么个需求,有两个Excel数据表格,没有唯一的字段进行关联,基本确定的规则是,在第一个数据表格中,有两列数据,在第二个数据表格中的描述列包含其信息,也就是第二个表格中的描述列,可能包括第一个数据表格的两列数据,现在自动处理的规则是,检测第二个数据表格中的描述列,其中包含第一个数据表格的两列数据,及匹配成功,并把第二个表格的其他数据提取到第一个表格中。

第一个数据表格的格式如下:Excel 多表数据模糊查询匹配,并提取对应数据到原始表-图片1文章源自陈学虎-https://chenxuehu.com/article/2021/06/7743.html

第二个数据表有一个描述列,和一个编号列,我现在要用第一个表的 Part 和 Footprint 去匹配,成功后,将第二个表的编号提取到第一个表中。文章源自陈学虎-https://chenxuehu.com/article/2021/06/7743.html

因为是临时处理这样的数据,就不过多的优化代码了,最快的搞定事情才是王道,按照自己的思路,一顿操作就实现了,代码虽乱,但是效果还是人工所不能比拟的:文章源自陈学虎-https://chenxuehu.com/article/2021/06/7743.html

import openpyxl

epath = r"C:\Users\xuehu\Desktop\1.xlsx"
epath_va = r"C:\Users\xuehu\Desktop\2.xlsx"

# 一些配置信息
# 第一个数据表的数据起始行
first_excel_from = 10
# 第一个数据表格中需要匹配的数据列
first_excel_data_one = 4
# 第一个数据表中需要匹配的数据列
first_excel_data_two = 5
# 第二个数据表的起始行
second_excel_data = 1
# 第二个数据表中检测匹配的数据列
second_excel_checkdata = 6
# 第二个数据表中需要提取的数据列
second_excel_getdata = 5

tnum = 0

workbook = openpyxl.load_workbook(epath)
booksheet = workbook.active
rows = booksheet.rows
columns = booksheet.columns
nowrow = 0

workbook_w = openpyxl.Workbook()
workbook_w.save("DATA.xlsx")
sheet = workbook_w.active


for row in rows:
    nowrow = nowrow + 1
    nowcell = 0
    # 开始读取行数据
    if nowrow > first_excel_from:
        # 开始读取列数据
        # 定义列数据表
        orgdata = []
        newdata = []
        for cell in row:
            newdata.append(cell.value)
            nowcell = nowcell + 1
            if nowcell == first_excel_data_one or nowcell == first_excel_data_two:
                # 将关键的匹配信息取出来
                orgdata.append(cell.value)
                # print(cell.value, end=',')
        # print(orgdata)
        # 读取第二个匹配表的数据,对比,并提取数据
        va_workbook = openpyxl.load_workbook(epath_va)
        va_booksheet = va_workbook.active
        va_rows = va_booksheet.rows
        va_columns = va_booksheet.columns
        va_rownum = 0
        for va_row in va_rows:
            va_rownum = va_rownum + 1
            va_cellnum = 0
            if va_rownum > second_excel_data:
                for va_cell in va_row:
                    if va_cell.value is None:
                        va_cell.value = " "
                    va_cellnum = va_cellnum + 1
                    if va_cellnum == second_excel_checkdata:
                        # print(va_cell.value)
                        # 执行数据匹配
                        tnum = 0
                        for st in orgdata:
                            if st in va_cell.value:
                                tnum = tnum + 1
                    if va_cellnum == second_excel_getdata:
                        if tnum == 2:
                            newdata.append(str(va_cell.value))
                            # print(va_cell.value)
                # print("============第二个表行结束================")
        print(newdata)
        sheet.append(newdata)
        # print("===========行结束===========")
    workbook_w.save("DATA.xlsx")

 文章源自陈学虎-https://chenxuehu.com/article/2021/06/7743.html

然后我就匹配出了如下的结果:文章源自陈学虎-https://chenxuehu.com/article/2021/06/7743.html

Excel 多表数据模糊查询匹配,并提取对应数据到原始表-图片2文章源自陈学虎-https://chenxuehu.com/article/2021/06/7743.html

 文章源自陈学虎-https://chenxuehu.com/article/2021/06/7743.html

 文章源自陈学虎-https://chenxuehu.com/article/2021/06/7743.html

 文章源自陈学虎-https://chenxuehu.com/article/2021/06/7743.html 文章源自陈学虎-https://chenxuehu.com/article/2021/06/7743.html

 
  • 版权声明:本文为原创文章,转载请附上原文出处链接及本声明。
  • 转载请注明:Excel 多表数据模糊查询匹配,并提取对应数据到原始表 | https://chenxuehu.com/article/2021/06/7743.html