python对Excel表格进行差异化筛选并高亮显示

最近公司在进行线下的不同阶段车辆的CAN信号通讯列表进行对比,基于此需求写此脚本,希望对有需求的人有帮助,有不懂得地方可以邮箱(zhaofu_xie@126.com)联系我,我有空的时候予以解答,一起探讨进步!

使用说明

1.把需要对比的文件与生成的脚本文件放在同一个文件夹下
2.把需要对比的某文件1信号名称所在列放在test1文件的A列
3.把需要对比的某文件2信号名称所在列放在test2文件的A列
4.安装python以及openpyxl模块后双击compare excel two table
5.同路径下分别生成a,b两文件,两文件中内容的差异项会高亮显示

对比前与对比后的图片示意

在这里插入图片描述对比前,任意在文件test,test2的A列随机输入字母。

在这里插入图片描述
test文件A列bbc,test1文件的d,b被加粗并用灰色底纹显示。(底纹颜色可在脚本中自行修改)

#Author:Xie Zhaofu 
# -*- coding: utf-8 -*-

#导入模块 openpyxl  
import openpyxl
from openpyxl.styles import PatternFill
from openpyxl.styles import colors
from openpyxl.styles import Font, Color

#读取excel文件
#括号中的字符串为你要比较的两个excel的路径,注意用“/”
wb_a = openpyxl.load_workbook(r'.\test.xlsx')
wb_b = openpyxl.load_workbook(r'.\test2.xlsx')
#定义一个方法来获取表格中某一列的内容,返回一个列表
#在这里,我的表格中:IP是具有唯一性的,所以我用它来区分数据的差异,而IP这一列在我的表格中是第“G”列
def getIP(wb):
##sheet = wb.get_active_sheet()
    sheet = wb.active
    ip = []
    for cellobj in sheet['A']:
        ip.append(cellobj.value)
 
    return ip
#获得ip列表
ip_a = getIP(wb_a)
ip_b = getIP(wb_b)
#将两个列表转换成集合
aa = set(ip_a)
bb = set(ip_b)
#找出两个列表的不同行,并转换成列表
difference = list(aa ^ bb)
#打印出列表中的元素
#到这一步,两个表格中不同的数据已经被找出来了
for i in difference:
     print (i)
 
 #将不同行高亮显示
print ("开始第一张表" + "----" *10)
##a = wb_a.get_active_sheet()['G']
a = wb_a.active['A']  #A列
for cellobj in a:
     if cellobj.value in difference:
         print (cellobj.value)
         cellobj.font = Font(color=colors.BLACK, italic=True ,bold = True)
         cellobj.fill = PatternFill("solid", fgColor="DDDDDD")
print ("开始第二张表" + "----" *10)
##b = wb_b.get_active_sheet()['G']
b = wb_b.active['A']  #A列
for cellobj in b:
    if cellobj.value in difference:
        print (cellobj.value)
        cellobj.font = Font(color=colors.BLACK, italic=True ,bold = True)
        cellobj.fill = PatternFill("solid", fgColor="DDDDDD")

wb_a.save('D:/a.xlsx')
wb_b.save('D:/b.xlsx')

后续优化目标

同事提出需要在excel文件筛选的基础上再进行比较显示。

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值