Excel文件比较器
25-04-08 02:31
986
0
import tkinter as tk from tkinter import ttk, filedialog, messagebox import pandas as pd import os from datetime import datetime class ExcelComparator: """ Excel文件比较器GUI应用程序 """ def __init__(self, root): self.root = root self.root.title("Excel文件比较器") self.root.geometry("800x700") # 文件路径变量 self.file_a_path = tk.StringVar() self.file_b_path = tk.StringVar() # 列选择变量 self.selected_column = tk.StringVar() # 存储比较结果 self.comparison_result = None self.setup_ui() def setup_ui(self): """ 设置GUI界面 """ # 软件说明 description_frame = ttk.LabelFrame(self.root, text="软件说明", padding="10") description_frame.pack(fill="x", padx=10, pady=5) description_text = """ 本软件用于比较两个Excel文件中的数据差异: 1. 选择两个Excel文件(A文件和B文件) 2. 选择要比对的列 3. 点击"开始比较"按钮 4. 软件会找出A文件中独有的数据(即A中有而B中没有的数据) 5. 可以点击"导出Excel"将结果保存到新的Excel文件中 使用场景: - 数据核对 - 数据查重 - 数据筛选 - 数据对比分析 """ description_label = ttk.Label(description_frame, text=description_text, justify="left") description_label.pack(fill="x", padx=5, pady=5) # 文件A选择 frame_a = ttk.LabelFrame(self.root, text="文件A(源文件)", padding="10") frame_a.pack(fill="x", padx=10, pady=5) ttk.Entry(frame_a, textvariable=self.file_a_path, width=50).pack(side="left", padx=5) ttk.Button(frame_a, text="选择文件", command=lambda: self.select_file("a")).pack(side="left", padx=5) # 文件B选择 frame_b = ttk.LabelFrame(self.root, text="文件B(对比文件)", padding="10") frame_b.pack(fill="x", padx=10, pady=5) ttk.Entry(frame_b, textvariable=self.file_b_path, width=50).pack(side="left", padx=5) ttk.Button(frame_b, text="选择文件", command=lambda: self.select_file("b")).pack(side="left", padx=5) # 列选择 frame_column = ttk.LabelFrame(self.root, text="选择比对列", padding="10") frame_column.pack(fill="x", padx=10, pady=5) column_label = ttk.Label(frame_column, text="请选择要比对的列(将根据此列的值进行比对):") column_label.pack(fill="x", padx=5, pady=2) self.column_combo = ttk.Combobox(frame_column, textvariable=self.selected_column) self.column_combo.pack(fill="x", padx=5, pady=2) # 按钮框架 button_frame = ttk.Frame(self.root) button_frame.pack(pady=10) # 比较按钮 ttk.Button(button_frame, text="开始比较", command=self.compare_files).pack(side="left", padx=5) # 导出按钮 self.export_button = ttk.Button(button_frame, text="导出Excel", command=self.export_excel, state="disabled") self.export_button.pack(side="left", padx=5) # 结果显示区域 result_frame = ttk.LabelFrame(self.root, text="比较结果", padding="10") result_frame.pack(fill="both", expand=True, padx=10, pady=5) self.result_text = tk.Text(result_frame, height=15, width=80) self.result_text.pack(fill="both", expand=True, padx=5, pady=5) # 添加滚动条 scrollbar = ttk.Scrollbar(result_frame, orient="vertical", command=self.result_text.yview) scrollbar.pack(side="right", fill="y") self.result_text.configure(yscrollcommand=scrollbar.set) def select_file(self, file_type): """ 选择Excel文件 Args: file_type (str): 文件类型标识('a'或'b') """ file_path = filedialog.askopenfilename( filetypes=[("Excel files", "*.xlsx *.xls")] ) if file_path: if file_type == "a": self.file_a_path.set(file_path) self.update_columns(file_path) else: self.file_b_path.set(file_path) def update_columns(self, file_path): """ 更新列选择下拉框 Args: file_path (str): Excel文件路径 """ try: df = pd.read_excel(file_path) self.column_combo['values'] = list(df.columns) if len(df.columns) > 0: self.column_combo.set(df.columns[0]) except Exception as e: messagebox.showerror("错误", f"读取文件失败:{str(e)}") def compare_files(self): """ 比较两个Excel文件并显示结果 """ if not self.file_a_path.get() or not self.file_b_path.get(): messagebox.showerror("错误", "请选择两个Excel文件") return if not self.selected_column.get(): messagebox.showerror("错误", "请选择比对列") return try: # 读取Excel文件 df_a = pd.read_excel(self.file_a_path.get()) df_b = pd.read_excel(self.file_b_path.get()) # 获取选择的列 column = self.selected_column.get() # 检查列是否存在 if column not in df_a.columns or column not in df_b.columns: messagebox.showerror("错误", "选择的列在其中一个文件中不存在") return # 找出A中不在B中的数据 self.comparison_result = df_a[~df_a[column].isin(df_b[column])] # 显示结果 self.result_text.delete(1.0, tk.END) if len(self.comparison_result) == 0: self.result_text.insert(tk.END, "没有找到A中独有的数据") self.export_button.config(state="disabled") else: self.result_text.insert(tk.END, f"找到{len(self.comparison_result)}条A中独有的数据:\n\n") self.result_text.insert(tk.END, self.comparison_result.to_string()) self.export_button.config(state="normal") except Exception as e: messagebox.showerror("错误", f"比较过程中出错:{str(e)}") def export_excel(self): """ 导出比较结果到Excel文件 """ if self.comparison_result is None or len(self.comparison_result) == 0: messagebox.showwarning("警告", "没有可导出的数据") return try: # 生成默认文件名 timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") default_filename = f"比较结果_{timestamp}.xlsx" # 选择保存路径 file_path = filedialog.asksaveasfilename( defaultextension=".xlsx", filetypes=[("Excel files", "*.xlsx")], initialfile=default_filename ) if file_path: # 导出到Excel self.comparison_result.to_excel(file_path, index=False) messagebox.showinfo("成功", "数据已成功导出到Excel文件!") except Exception as e: messagebox.showerror("错误", f"导出Excel时出错:{str(e)}") if __name__ == "__main__": root = tk.Tk() app = ExcelComparator(root) root.mainloop()
-
工资管理表格 - 企业管理表格
第一节 变更工资申请单.DOC第一节 工作出勤表.DOC第一节 生产奖金核定表.DOC第一节 计件工资计算表.DOC第七节 件薪核定通知单.DOC第七... 1242 0 24-07-30 -
人工智能及其应用(第3版) | 高等教育出版社二维码服务平台在线视频
人工智能是解决复杂工程问题的重要工具,是当前许多高新技术产品中的核心技术。读者通过学习本书,能够掌握人工智能的基本内容,了解人工智... 2146 0 24-08-06 -
3D小人素材ppt
607 0 21-07-12 -
普通话水平测试训练教程(拼音篇)MP3
Track 1.mp3Track 10.mp3Track 11.mp3Track 12.mp3Track 13.mp3Track 14.mp3Track 15.mp3Track 16.mp3Track 17.mp3Track 18.mp3T... 871 0 24-08-20 -
wordpress大前端D8主题
WordPress 大前端D8主题扁平化、简洁白色、多设备支持、多功能配置,包含读者墙、标签云、存档页、链接页、投稿页、案例展示页、新版页面... 467 0 21-07-12 -
IT公司小程序
IT公司小程序模板是一个为IT公司定制设计的小程序模板。它不仅可以作为学习不同技术领域的初学者的学习项目,也可以作为毕业设计、课程设计... 970 0 24-10-16 -
新一代视频压缩编码标准——H.264/AVC
2003年3月,ITU-T/ISO的联合项目组JVT发布了视频编码标准H.264/AVC,由于其优越的压缩比以及较强的网络适应能力,H.264/AVC获得了日益广泛... 819 0 24-05-24 -
NES模拟器
《NES模拟器》是一款强大的NES游戏模拟器,使用它你能够在电脑上玩FC/NES游戏,软件完全兼容nes/fds/nsf等游戏,同时软件功能十分强大,支... 1009 0 24-11-17
发表我的评论
共0条评论
- 这篇文章还没有收到评论,赶紧来抢沙发吧~