最近剛接觸python,找點小任務來練練手,希望自己在實踐中不斷的鍛煉自己解決問題的能力。
公司里會有這樣的場景:有一張電子表格的內容由兩三個部門或者更多的部門用到,這些員工會在維護這些表格中不定期的跟新一些自己部門的數據,時間久了,大家的數據就開始打架了,非常不利於管理。怎樣快速找到兩個或者多個電子表格中數據的差異呢?
解決辦法:
1.Excel自帶的方法(有興趣的自行百度)
2.python 寫一個小腳本
1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 4 #導入模塊 openpyxl 5 import openpyxl 6 from openpyxl.styles import PatternFill 7 from openpyxl.styles import colors 8 from openpyxl.styles import Font, Color 9 10 #讀取excel文件 11 #括號中的字符串為你要比較的兩個excel的路徑,注意用“/” 12 wb_a = openpyxl.load_workbook('d:/test.xlsx') 13 wb_b = openpyxl.load_workbook('d:/test2.xlsx') 14 #定義一個方法來獲取表格中某一列的內容,返回一個列表 15 #在這里,我的表格中:IP是具有唯一性的,所以我用它來區分數據的差異,而IP這一列在我的表格中是第“G”列 16 def getIP(wb): 17 sheet = wb.get_active_sheet() 18 ip = [] 19 for cellobj in sheet['G']: 20 ip.append(cellobj.value) 21 22 return ip 23 #獲得ip列表 24 ip_a = getIP(wb_a) 25 ip_b = getIP(wb_b) 26 #將兩個列表轉換成集合 27 aa = set(ip_a) 28 bb = set(ip_b) 29 #找出兩個列表的不同行,並轉換成列表 30 difference = list(aa ^ bb) 31 #打印出列表中的元素 32 #到這一步,兩個表格中不同的數據已經被找出來了 33 for i in difference: 34 print (i) 35 36 #將不同行高亮顯示 37 print ("開始第一張表" + "----" *10) 38 a = wb_a.get_active_sheet()['G'] 39 for cellobj in a: 40 if cellobj.value in difference: 41 print (cellobj.value) 42 cellobj.font = Font(color=colors.BLACK, italic=True ,bold = True) 43 cellobj.fill = PatternFill("solid", fgColor="DDDDDD") 44 print ("開始第二張表" + "----" *10) 45 b = wb_b.get_active_sheet()['G'] 46 for cellobj in b: 47 if cellobj.value in difference: 48 print (cellobj.value) 49 cellobj.font = Font(color=colors.BLACK, italic=True ,bold = True) 50 cellobj.fill = PatternFill("solid", fgColor="DDDDDD") 51 52 wb_a.save('d:/a.xlsx') 53 wb_b.save('d:/b.xlsx')
這樣,就會保存兩個excel的副本,並在這個副本中用單元格填充色和字體顏色標注出兩個表格中不同的數據差異
未解決:
1.怎樣將這些有差異的數據補充到一張表里,形成一個全集表
2.怎么優化精簡代碼