python实现比较2个excel

# @Time    :  '2021-1-11 20:35'
# @Author  :  'pc.kang'

"""
使用前请把主键放在A1列并排序,保持两份文件顺序完全一致
代码遍历源文件的每一行,然后遍历每行的所有单元格去和目标文件相同位置的值作比较,
如果两边不一致,则在源文件把不一致的单元格填充背景色为红色
"""
import openpyxl
from openpyxl.styles import PatternFill


# 获取sheet对象的某一行
def getRow(sheet, rowNo):
	try:
		rows = []
		for row in sheet.iter_rows():
			rows.append(row)
		return rows[rowNo - 1]
	except Exception as e:
		raise e


# 获取指定坐标单元格的值
def getCellOfValue(sheet, coordinate=None, rowNo=None, colsNo=None):
	if coordinate != None:
		try:
			return sheet.cell(coordinate=coordinate).value
		except Exception as e:
			raise e
	elif coordinate is None and rowNo is not None and \
			colsNo is not None:
		try:
			return sheet.cell(row=rowNo, column=colsNo).value
		except Exception as e:
			raise e
	else:
		raise Exception("Insufficient Coordinates of cell !")


print("----------比对程序运行 START----------")
origin_file = r"C:\Users\54718\Desktop\origin.xlsx"
target_file = r"C:\Users\54718\Desktop\target.xlsx"
# 把源文件和目标文件加载到内存对象
wb_origin = openpyxl.load_workbook(origin_file)
wb_target = openpyxl.load_workbook(target_file)

# 通过sheet名拿到sheet对象
origin_sheet = wb_origin.get_sheet_by_name("Sheet1")
target_sheet = wb_target.get_sheet_by_name("Sheet1")
# 获取最大行号
origin_sheet_max_row = origin_sheet.max_row
target_sheet_max_row = target_sheet.max_row
# 获取最大列号
origin_sheet_max_column = origin_sheet.max_column
target_sheet_max_column = origin_sheet.max_column

if origin_sheet_max_column != target_sheet_max_column:
	print("2个文件列数不一致,请检查")
if origin_sheet_max_row != target_sheet_max_row:
	print("2个文件行数不一致,请检查")
print("----------比对程序运行中,开始循环遍历----------")
for row_no in range(2, origin_sheet_max_row + 1):
	# row = wb_origin.getRow(origin_sheet, row_no) # row_no行号
	row = getRow(origin_sheet, row_no)
	row_length = len(row)
	num = 1 # 列号,从第二列开始比对
	red_fill = PatternFill("solid", fgColor="FF0000")
	while num < row_length:
		if getCellOfValue(origin_sheet, rowNo=row_no, colsNo=num) != getCellOfValue(target_sheet, rowNo=row_no, colsNo=num):
			print("第%s行%s列单元格的数据比对结果不一致,源文件中单元格的值是:%s"%(row_no, num, getCellOfValue(origin_sheet, rowNo=row_no, colsNo=num)))
			row[num-1].fill = red_fill
			print("给源文件单元格%s打标"%row[num-1])
		else:
			pass
		num += 1

wb_origin.save(origin_file)
print("----------比对程序运行 END----------")
posted @ 2022-04-05 19:07  我是一言  阅读(284)  评论(0编辑  收藏  举报