最近干活要搞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"!