72 lines
2.6 KiB
Python
72 lines
2.6 KiB
Python
import pandas as pd
|
||
|
||
|
||
class Comparator:
|
||
def __init__(self, file1, file2):
|
||
self.file1 = file1
|
||
self.file2 = file2
|
||
self.log_messages = []
|
||
|
||
def compare_ExcelFiles(self):
|
||
# 读取Excel文件
|
||
xls1 = pd.ExcelFile(f"{self.file1}.xlsx", engine="openpyxl")
|
||
xls2 = pd.ExcelFile(f"{self.file2}.xlsx", engine="openpyxl")
|
||
|
||
# 获取所有工作表的名称
|
||
sheet_names1 = set(xls1.sheet_names)
|
||
sheet_names2 = set(xls2.sheet_names)
|
||
all_sheet_names = sheet_names1.union(sheet_names2)
|
||
message = f"文件1有{len(sheet_names1)}个sheet,文件2有{len(sheet_names2)}个sheet"
|
||
print(message)
|
||
self.log_messages.append(f"\n{message}")
|
||
|
||
# 读取Excel文件中的特定工作表
|
||
for i in all_sheet_names:
|
||
if i not in sheet_names1:
|
||
message = f"文件1中不存在sheet: {i}"
|
||
print(message)
|
||
self.log_messages.append(f"\n{message}")
|
||
continue
|
||
if i not in sheet_names2:
|
||
message = f"文件2中不存在sheet: {i}"
|
||
print(message)
|
||
self.log_messages.append(f"\n{message}")
|
||
continue
|
||
|
||
df1_ = pd.read_excel(
|
||
f"{self.file1}.xlsx", sheet_name=i, engine="openpyxl", skiprows=1
|
||
)
|
||
|
||
df2_ = pd.read_excel(
|
||
f"{self.file2}.xlsx", sheet_name=i, engine="openpyxl", skiprows=1
|
||
)
|
||
|
||
# 按列名称重新排序后进行比较
|
||
df1 = df1_.reindex(sorted(df1_.columns), axis=1)
|
||
df2 = df2_.reindex(sorted(df2_.columns), axis=1)
|
||
|
||
# 比较两个DataFrame中的数据
|
||
if df1.equals(df2):
|
||
message = f"第{i}个sheet的数据相同"
|
||
print(message)
|
||
self.log_messages.append(f"\n{message}")
|
||
else:
|
||
message = f"第{i}个sheet的数据不同\n----------------------------\n不同数据如下:"
|
||
print(message)
|
||
self.log_messages.append(f"\n{message}")
|
||
try:
|
||
message = df1.compare(df2)
|
||
print(message)
|
||
self.log_messages.append(f"\n{message}")
|
||
except ValueError:
|
||
message = "数据列名称不同"
|
||
print(message)
|
||
self.log_messages.append(f"\n{message}")
|
||
message = "----------------------------"
|
||
print(message)
|
||
self.log_messages.append(f"\n{message}")
|
||
|
||
|
||
if __name__ == "__main__":
|
||
pass
|