Excel操作

最近干活要搞Excel!

核对两个工作簿,从“源数据”中找到“未核对”中对应的记录的信息,把数据添加到“未核对”中,顺便检查下数据有无出错。

 

要求:

在”未核对“中的每个表添加一列”姓名“,从”数据源“中找到对应信息后填写;

在中间插入两列,填上”数据源“中与该记录对应的数据;

核查没有对应上的数据。

 

对应是通过比较”未核对“中的出生日期和分数及”数据源“中的生日、分数来进行。

因为要一个个对比的话实在太多了,因此用脚本来完成。

 

代码:

import openpyxl
import os
work_path="D:\\Work"
os.chdir(work_path)

work1="new_test.xlsx"
work2="datasourse.xlsx"tables=[a,b,c,d,e,f]

wb1=openpyxl.load_workbook(work1)
wb2=openpyxl.load_workbook(work2)

datasource=wb2[总表]

for i in tables:
    
    datas=[]
    ws=wb1[i]
    ws[A1].value="姓名"
    ws[G1].value="备注"
    ws[H1].value="类型"    
    for j in datasource.rows:
        if j[3].value==i:
            datas.append(j)
    births=[x[-2].value for x in datas]‘‘‘提取生日‘‘‘
    grades=[x[-3].value for x in datas]
    ‘‘‘获取datas中每一行分数‘‘‘
    grades=[x[:3] for x in grades]
    Checks=list(zip(identyIDs,grades))
    for k in ws.iter_rows(min_row=2,max_row=len(Checks)+1):
        birth=‘‘.join(k[2].value[:10].split(-))
     ‘‘‘两个表的日期格式不一致,修改一下‘‘‘ check
=(birth,str(k[10].value)[:3]) try: num=Checks.index(check) k[0].value=datas[num][5].value k[5].value=datas[num][9].value k[6].value=datas[num][10].value k[7].value=datas[num][11].value
        ‘‘‘将数据表中的对应的数据挪入要核对的表‘‘‘
except: print("无匹配:",i,k[2].value) wb1.save(work1) wb1.close() wb2.close()

说明:

本来可以用openpyxl自带的函数insert_cols增加列,但是在原表的最后另有图表,占用的单元格与前面不一致,此时在前面插入新列会导致最后一列挪入不匹配的单元格中。所以利用Excel自带的功能:先选择所有的表,然后在要添加列的地方插入列,这样所有的表都会被插入新的列,之后再用脚本直接在新的列中增添数据。

 

引用、改变单元格的值一定要加上".value"!

Excel操作

上一篇:(Concurrent)HashMap的存储过程及原理。


下一篇:DNS域传送漏洞