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----------")


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM