首頁 > 軟體

Python實現對比兩個Excel資料內容並標記出不同

2022-12-27 14:01:18

日常工作中需要對比兩個Excel工作表中的資料差異是很不方便的,使用python來做就比較簡單了!

我們的思路是通過讀取兩個Excel的資料,採用逐個遍歷對比同一個位置的兩個單元格如果不是相同的則打上對應的標記,處理完成後再另存為Excel檔案。

既然是對每個單元格的操作那肯定離不開openpyxl模組,沒有的話使用pip的方式安裝一下即可。

pip install openpyxl

接著我們準備讀取兩個需要對比的Excel資料內容,這裡準備的是data1.xlsx和data2.xlsx作為源資料使用。

然後,將openpyxl模組及其所需要的樣式填充/文字設定相關的物件匯入。

# It imports the PatternFill class from the openpyxl.styles module.
from openpyxl.styles import PatternFill

# It imports the colors class from the openpyxl.styles module.
from openpyxl.styles import colors

# It imports the Font class from the openpyxl.styles module.
from openpyxl.styles import Font

# It imports the openpyxl module and renames it as pxl.
import openpyxl as pxl

下面使用openpyxl模組的load_workbook函數讀取到Excel檔案物件,並提取兩個Excel檔案中'Sheet1'工作表作為源資料。

# It loads the data1.xlsx file and assigns it to the workbook_1 variable.
workbook_1 = pxl.load_workbook(r'data1.xlsx')

# It loads the data2.xlsx file and assigns it to the workbook_2 variable.
workbook_2 = pxl.load_workbook(r'data2.xlsx')

# Assigning the Sheet1 object to the workbook_1_sheet_1 variable.
workbook_1_sheet_1 = workbook_1['Sheet1']

# It assigns the Sheet1 object to the workbook_2_sheet_1 variable.
workbook_2_sheet_1 = workbook_2['Sheet1']

提取兩個工作表中的最大行和最大列,這樣即使兩個表的行數和列數不一致也能完全找出不同的單元格資料。

# A ternary operator. It is equivalent to:
max_row = workbook_1_sheet_1.max_row if workbook_1_sheet_1.max_row > workbook_2_sheet_1.max_row else workbook_2_sheet_1.max_row

# A ternary operator. It is equivalent to:
max_column = workbook_1_sheet_1.max_column if workbook_1_sheet_1.max_column > workbook_2_sheet_1.max_column else workbook_2_sheet_1.max_column

使用for迴圈的方式分別遍歷行資料和列資料,然後判斷對應單元格的資料值是否相等,若是不相等則打上標記。

for i in range(1, (max_row + 1)):
    for j in range(1, (max_column + 1)):
        cell_1 = workbook_1_sheet_1.cell(i, j)
        cell_2 = workbook_2_sheet_1.cell(i, j)
        if cell_1.value != cell_2.value:
            cell_1.fill = PatternFill("solid", fgColor='FFFF00')
            cell_1.font = Font(color=colors.BLACK, bold=True)
            cell_2.fill = PatternFill("solid", fgColor='FFFF00')
            cell_2.font = Font(color=colors.BLACK, bold=True)

最後將對比處理完成後的工作表物件使用save函數進行儲存即可。

# It saves the workbook_1 object to the data3.xlsx file.
workbook_1.save('data3.xlsx')

# It saves the workbook_2 object to the data4.xlsx file.
workbook_2.save('data4.xlsx')

下面是通過對比差異化處理後的data3.xlsx和data4.xlsx的工作表資料。

從結果來看,即使是兩個表的資料行數不一致也能對比出差異資料並打上了標記。

到此這篇關於Python實現對比兩個Excel資料內容並標記出不同的文章就介紹到這了,更多相關Python對比Excel資料內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com


IT145.com E-mail:sddin#qq.com