python如何比较两个excel_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----------")

你可能感兴趣的:(python如何比较两个excel_python实现比较2个excel)