共计 2272 个字符,预计需要花费 6 分钟才能阅读完成。
导读 | 日常工作中需要对比两个 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 的工作表数据。
从结果来看,即使是两个表的数据行数不一致也能对比出差异数据并打上了标记。
正文完
星哥玩云-微信公众号