关于excel表的指定文字匹配并比较数值大小的python脚本

前言

        实习时公司要求将一堆excel表的数据通过筛选写入到一个新的表中,考虑到工作量之大,写了比较简易的脚本,不是特别的完善。因为各表中的数据格式不一,很难写一个较完整的脚本,只能通过不断调试来完成表格,但还是缩减了我个人的工作量。

环境

Python 3.7.9 

导入插件  pip install openpyxl==3.1.1

脚本编写

  1. 加载好对应的表格。wb2我没有做一个列表将所有表格放入进行循环匹配,因为所有表格格式、对应行数、匹配文字都不一样!如果要做成列表调试就更繁琐了。这里则采用手动去更改wb2的表格,每导入到wb1一次就需要自行更改wb2成下一个你需要导入的表格名称。
    from openpyxl import load_workbook
    
    # 加载Excel文件
    wb1 = load_workbook('D:/Users/Desktop/该表负责收集数据.xlsx')#即模板
    wb2 = load_workbook('C:/reno/从该表中筛选数据.xlsx')#需要筛选的数据
    
  2. 选择工作表。excel表中有多个活动工作表,你需要指定你要进行筛选数据的工作表
    
    ws1 = wb1.active  # 默认第一个表是活动工作表
    ws2 = wb2['4G常规温升']  # 假设4G常规温升表是活动工作表
    
    ​

  3. 指定列的索引,根据实际情况调整。下面是你需要指定哪一行哪一列的数据进行比较筛选,以及对应哪一行列的文字匹配。
    target_col_index = 2  # wb2表需要匹配目标的文本在第二列
    target_col_index1 = 1  # wb1表需要匹配目标的文本在第一列
    k_col_index = 10       # 正上 k列的数据
    m_col_index = 12      # 正下 m列的数据
    o_col_index = 14        #背面 o列的数据
    s_col_index = 18       # 侧上 s列的数据
    u_col_index = 20       # 侧下 u列的数据
    result_col_index = 13  # 写入ws1表的第12列

    例如wb1表的第一列是这样的:

  4. 指定文本。也就是上列出现的场景,你要在列表里列举出来以便后面循环遍历的时候能够在对应的场景进行数据筛选。
    ​
    # 指定文本
    target_texts =['4G微信视频','4G腾讯视频','待机充电标配充电(非极速)','待机充电标配充电(极速)','30℃待机充电标配充电','手机搬家标配充电','待机充电标配充电']
    
    ​

  5. 正片开始。使用无限for循环大法(脑袋不想想那么多逻辑了,直接无脑循环)

    # 遍历第一个表,找到包含指定文本的单元格
    for target_text in target_texts:
        for row in range(1, ws2.max_row + 1):  # 假设第二行为标题行
            cell = ws2.cell(row=row, column=target_col_index)
            if cell.value == target_text:# 找到文字匹配的行,获取行号
                    row_num = cell.row  # 转换为行号
                    # 在第二个表中找到对应的行
                    k_value = ws2.cell(row=int(row_num), column=k_col_index).value
                    m_value = ws2.cell(row=int(row_num), column=m_col_index).value
                    o_value = ws2.cell(row=int(row_num), column=o_col_index).value
                    s_value = ws2.cell(row=int(row_num), column=s_col_index).value
                    u_value = ws2.cell(row=int(row_num), column=u_col_index).value
                    # 比较数值大小,筛选大的值
                    if str(k_value) > str(m_value):
                        result_text = str(k_value)
                    else:
                        result_text = str(m_value)
                    if str(s_value) > str(u_value):
                        result_text1 = str(s_value)
                    else:
                        result_text1 = str(u_value)
                    for row in range(1, ws1.max_row + 1):  # 假设第一行为标题行
                        cell = ws1.cell(row=row, column=target_col_index1)
                        if cell.value == target_text:# 找到文字匹配的行,输出到ws1表中对应的行列
                            ws1.cell(row=row, column=result_col_index).value = result_text
                            ws1.cell(row=row+1, column=result_col_index).value = o_value
                            ws1.cell(row=row+2, column=result_col_index).value = result_text1
    
    # 保存修改后的第一个Excel文件
    wb1.save('D:\原始数据收集.xlsx')

    总结

                调试过程还是比较繁琐,不适合短作业用,如果有大量的表格数据需要进行筛选可以考虑采用。

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值