日常工作中需要对比两个Excel工作表中的数据差异是很不方便的,使用python来做就比较简单了!本文为大家介绍了python实现对比两个Excel的数据内容并标记出不同数据的示例代码,需要的可以参考一下 |
日常工作中需要对比两个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的工作表数据。
从结果来看,即使是两个表的数据行数不一致也能对比出差异数据并打上了标记。