Python 快速比对两个 Excel 表格数据差异并高亮显示
本文介绍利用 Python 的 openpyxl 库快速比对两个 Excel 文件数据差异的方法。通过提取指定列(如 IP)并转换为集合求差集,定位不同行,进而高亮标记并保存副本,解决多部门维护表格导致的数据冲突问题。
近期开始学习 Python,通过完成小型任务来锻炼解决实际问题的能力。
在企业环境中,常出现同一份电子表格由多个部门共同维护的情况。各部门员工会不定期更新各自负责的数据,随着时间推移,不同版本间的数据容易产生冲突,给统一管理带来困难。因此,如何快速识别两个或多个电子表格之间的数据差异成为一个实际需求。
解决方案:
1. 使用 Excel 自带的功能(感兴趣的用户可自行搜索相关教程)。
2. 编写 Python 脚本进行自动化处理。
#!/usr/bin/env python
# -*- 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('d:/BAKFILE/d046532/Desktop/check excel/test.xlsx')
wb_b = openpyxl.load_workbook('d:/BAKFILE/d046532/Desktop/check excel/test2.xlsx')
#定义一个方法来获取表格中某一列的内容,返回一个列表
#在这里,我的表格中:IP是具有唯一性的,所以我用它来区分数据的差异,而IP这一列在我的表格中是第“G”列
def getIP(wb):
sheet = wb.get_active_sheet()
ip = []
for cellobj in sheet['G']:
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']
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']
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:/BAKFILE/d046532/Desktop/a.xlsx')
wb_b.save('d:/BAKFILE/d046532/Desktop/b.xlsx')
执行脚本后,会生成两个 Excel 文件的副本,并在副本中通过单元格填充色和字体颜色高亮显示存在差异的数据,直观展示两个表格间的不同之处。
待解决问题:
1. 如何将存在差异的数据合并到一张表中,形成完整的全集表。
2. 如何进一步优化和精简代码逻辑。
以上就是关于使用 Python 快速找出两个电子表格数据差异的全部内容,希望能为读者提供参考,也欢迎大家继续支持本站。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









