2021-04-08

python openpyxl 进阶版(批量数据筛选和写入)

  上一篇文章讲述了openpyxl基本操作,包括openpyxl的安装,Excel文档、表格的打开,基本内容的写入和读取。这篇文章重点介绍openpyxl根据条件筛选,批量选取写入数据。

一、重点应用

现有表1表2,表内均有大量数据,现根据特定条件将表2内容写入表1中指定位置。

二、需要的工具

正则表达式re,用于筛选表格行数和列数。如果不懂re,也没有关系,本文只用re的匹配表达规则,是固定用法,大家看一遍记住即可。

三、正菜(实例操作)

1、话不多说,上表

这是表1
这是表2

2、工作要求:

现要求将表2中 “将X村” 人员的工资收入按 户主姓名 复制到 表1 中 相同 户主姓名 对应的 工资收 栏 里面

3、工作思路:

分析条件要求
第一步:找出表2中 “将X村”
第二步 : 在第一步的基础上,找出“户主姓名”一栏内容,与表1中“户主姓名”一栏匹配,如果名字相同,则开始赋值

4、代码:

1、基础代码:

引入第三方库 openpyxl,re;导入工作表

import re
import openpyxl
wb1 = openpyxl.load_workbook(r'C:\Users\Administrator\Desktop\表1.xlsx')
wb1book =wb1['附件2']
wb2 = openpyxl.load_workbook(r'C:\Users\Administrator\Desktop\表2.xlsx')
wb2book = wb2['附件2']

**‘附件2’**是表1,表2内的子工作表名字

2、找出表2中 “将X村”,并找到关键横坐标,即可选出所在“将X村”的户主姓名,因为他们横坐标相同,户主姓名纵坐标是固定的‘E’:
for i in wb2book['C']:
    if i.value == '将X村':
        print(i)
        s = str(i)
        s1 = re.match(r'(.+).C(\d+)>$', s)
        s2 = int(s1.group(2))
    wb2book['E%d'%(s2)]

在C列中找出值为 “将X村” 的单元格,通过 print 函数 打印,值为 <Cell ‘附件2’.C967>这样的数据,其中对我们有用的就是 C967,即符合条件的坐标,通过正则RE筛选出 横坐标(962) 并赋值给 s2 ,第一行的结果就是s2 = 967, wb2book[‘E%d’%(s2)] 就是全部在‘将X村’ 的 户主姓名

3、取 表1中 “户主姓名” 与 表2筛选出来的“户主姓名”匹配,如果相同,则对工资性收入赋值 并保存:
        for j in wb1book['E']:
            if j.value == wb2book['E%d'%(s2)].value: #wb2book['E%d'%(s2)]是上一步得出的
                print(j)
                l = str(j)
                l1 = re.match(r'(.+).E(\d+)>$', l)
                l2 = int(l1.group(2))
                wb1book['H%d' % (l2)] = wb2book['H%d' % (s2)].value

wb1.save(r'C:\Users\Administrator\Desktop\表1.xlsx')
3、执行完的结果:

执行完的结果

3、总结:

附全部代码

import re
import openpyxl
wb1 = openpyxl.load_workbook(r'C:\Users\Administrator\Desktop\表1.xlsx')
wb1book =wb1['附件2']
wb2 = openpyxl.load_workbook(r'C:\Users\Administrator\Desktop\表2.xlsx')
wb2book = wb2['附件2']

for i in wb2book['C']:
    if i.value == '将X村':
        s = str(i)
        s1 = re.match(r'(.+).C(\d+)>$', s)
        s2 = int(s1.group(2))
        # print(wb2book['E%d'%(s2)])
        for j in wb1book['E']:
            if j.value == wb2book['E%d'%(s2)].value:
                print(j)
                l = str(j)
                l1 = re.match(r'(.+).E(\d+)>$', l)
                l2 = int(l1.group(2))
                wb1book['H%d' % (l2)] = wb2book['H%d' % (s2)].value

wb1.save(r'C:\Users\Administrator\Desktop\表1.xlsx')

1、比较难理解的就是根据条件,选出对应的坐标,用于控制指定内容的选取和写入
2、这个例子掌握后,后面的“转移收入”和“财产收入”也可以一次性写入,大家可以尝试下
3、如果对RE不太了解,可以搜一下re教程,这属于固定用法。本文re主要用于在字符串中,筛选出对应的列坐标。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值