乐于分享
好东西不私藏

office办公python代码:Excel文件合并工具1.0(pandas)

office办公python代码:Excel文件合并工具1.0(pandas)

Python速成心法

敲代码,查资料,问Ai

练习,探索,总结,优化

博文创作不易,代码的过程中,如有疑问的地方,欢迎大家指正留言交流。喜欢的老铁可以多多点赞+收藏分享+置顶,小红牛在此表示感谢。

office办公python代码:reportlab模块参数的用法及示例

Python项目:按顺序合并多个.pdf文件

office办公python代码:PDF书籍封面生成器1.0(tk+reportlab)

office办公python代码:批量对所有.pdf文件生成水印(pypdf+reportlab)

office办公python代码:.txt文本转pdf工具
office办公python代码:给PDF加页码,第 {page} 页 / 共 {total} 页
office办公python代码:reportlab绘制pdf自律记录表
office办公python代码:文本仿表格对齐显示
Python项目81:Excel工作表批量重命名工具1.0(tkinter+openpyxl)
Python项目源码69:Excel数据筛选器1.0(tkinter+sqlite3+pandas)
Excel 文件合并工具 – 使用说明书
1. 功能简介:本工具用于将同一文件夹内的多个 Excel 文件(.xlsx / .xls)纵向合并成一个文件,并自动保存为新的 Excel 文件。合并时所有数据均按文本格式读取,可完整保留单元格中开头为零(如“00123”)和长数字(如身份证号)。
2. 操作步骤
选择文件夹:点击 【浏览ex文件夹】,在弹出的对话框中选择包含 Excel 文件的文件夹(可含多个子文件)。工具会自动排除以 ~$ 开头的临时文件。
设定保存文件名(可选):在“保存文件名”框中输入您想要的文件名(默认为“合并结果”)。无需手动加 .xlsx,程序会自动添加。
执行合并并保存,点击 【excel合并+保存】 按钮。
程序将读取文件夹内所有 .xlsx / .xls 文件,按行拼接(列名对齐)
合并完成后,表格区会立即显示预览数据。同时,合并结果将自动保存在程序运行目录下(文件名为您设定的名称)。
查看结果:操作成功后,会弹出提示框,告知合并的总行数和文件个数。您也可以直接在文件夹中找到生成的 Excel 文件。
3. 注意事项
所有文件必须具有相同的列结构(列名一致),否则合并后不同文件的列会错位或产生空值。
本工具不会修改原始文件,请放心使用。若文件夹中没有 Excel 文件,或文件夹路径无效,程序会给出相应警告。
合并后的文件默认保存在当前程序所在的目录,若需保存到其他位置,可先移动程序或使用绝对路径命名(暂不支持自定义保存目录)。

↓ 完整源码如下 ↓

# -*- coding: utf-8 -*-# @Author : 小红牛# 微信公众号:wdPythonimport osimport tkinter as tkfrom tkinter import ttk, messagebox, filedialogimport pandas as pdclass ExcelMergerApp:    def __init__(self, root):        self.root = root        self.root.title("Excel 文件合并工具")        self.root.geometry("900x600")        # 存储合并后的 DataFrame        self.df = None        # ---------- 顶部控制区域 ----------        control_frame = tk.Frame(root)        control_frame.pack(pady=10, fill=tk.X)        # 文件夹选择        self.folder_path = tk.StringVar()        self.folder_entry = tk.Entry(control_frame, textvariable=self.folder_path, width=30)        self.folder_entry.pack(side=tk.LEFT, padx=5)        self.browse_btn = tk.Button(control_frame, text="浏览ex文件夹", command=self.browse_folder)        self.browse_btn.pack(side=tk.LEFT, padx=5)        # 保存文件名(不带后缀)        tk.Label(control_frame, text="保存文件名:").pack(side=tk.LEFT, padx=5)        self.filename_entry = tk.Entry(control_frame, width=20)        self.filename_entry.pack(side=tk.LEFT, padx=5)        self.filename_entry.insert(0"合并结果")   # 默认名称,不含扩展名        # 读取+合并保存按钮        self.merge_save_btn = tk.Button(control_frame, text="excel合并+保存", command=self.merge_and_save)        self.merge_save_btn.pack(side=tk.LEFT, padx=10)        # ---------- Treeview 及滚动条 ----------        tree_frame = tk.Frame(root)        tree_frame.pack(fill=tk.BOTH, expand=True, padx=10, pady=10)        # 树形区域先写滚动条,再写组件绑定        v_scrollbar = ttk.Scrollbar(tree_frame, orient=tk.VERTICAL)        v_scrollbar.pack(side=tk.RIGHT, fill=tk.Y)        self.tree = ttk.Treeview(tree_frame, show='tree', yscrollcommand=v_scrollbar.set)        self.tree.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)        v_scrollbar.config(command=self.tree.yview)        # ---------- 状态栏 ----------        self.status = tk.Label(root, text="就绪", bd=1, relief=tk.SUNKEN, anchor=tk.W)        self.status.pack(side=tk.BOTTOM, fill=tk.X)    def browse_folder(self):        """弹出文件夹选择对话框,将路径填入输入框"""        folder_selected = filedialog.askdirectory()        if folder_selected:            self.folder_path.set(folder_selected)    def merge_and_save(self):        """读取选定文件夹下所有 Excel,按文本格式合并,并立即保存"""        folder = self.folder_path.get().strip()        if not folder:            messagebox.showerror("错误""请先选择文件夹!")            self.status.config(text="错误:未选择文件夹")            return        if not os.path.exists(folder):            messagebox.showerror("错误"f"文件夹 '{folder}' 不存在!")            self.status.config(text="错误:文件夹不存在")            return        # 查找所有 Excel 文件(排除临时文件)        excel_files = []        for f in os.listdir(folder):            if f.lower().endswith(('.xlsx''.xls')):                full_path = os.path.join(folder, f)                if not os.path.basename(full_path).startswith("~$"):                    excel_files.append(full_path)        if not excel_files:            messagebox.showwarning("警告"f"文件夹 '{folder}' 中没有找到 Excel 文件!")            self.status.config(text="警告:没有 Excel 文件")            return        try:            dfs = []            for file in excel_files:                # 使用 dtype=str 强制所有列按文本读取,保留前导零                if file.endswith('.xlsx'):                    df = pd.read_excel(file, engine='openpyxl', dtype=str)                else:                    df = pd.read_excel(file, engine='xlrd', dtype=str)                dfs.append(df)            # 纵向合并(按行拼接)            self.df = pd.concat(dfs, ignore_index=True, sort=False)            # 更新 Treeview 显示            self.update_treeview()            # 保存文件(自动添加 .xlsx 后缀)            filename = self.filename_entry.get().strip()            if not filename:                filename = "合并结果"            if not filename.lower().endswith('.xlsx'):                filename += '.xlsx'            self.df.to_excel(filename, index=False, engine='openpyxl')            messagebox.showinfo("成功",                f"合并并保存成功!共 {len(self.df)} 行,来自 {len(excel_files)} 个文件\n保存至:{filename}")            self.status.config(text=f"合并保存成功:{filename}")        except Exception as e:            messagebox.showerror("错误"f"合并或保存失败:{str(e)}")            self.status.config(text="操作失败")    def update_treeview(self):        """根据 self.df 更新 Treeview 表格"""        if self.df is None or self.df.empty:            self.tree.delete(*self.tree.get_children())            return        # 清空旧数据        self.tree.delete(*self.tree.get_children())        # 设置列        columns = list(self.df.columns)        self.tree["columns"] = columns        self.tree["show"] = "headings"        # 设置列标题和自适应宽度        for col in columns:            self.tree.heading(col, text=col)            # 简单计算列宽:标题长度和内容最大长度取较大值            max_len = max(len(str(col)), self.df[col].astype(str).map(len).max())            self.tree.column(col, width=min(max_len * 10300), anchor="w")        # 插入数据行        for idx, row in self.df.iterrows():            values = [row[col] for col in columns]            self.tree.insert("", tk.END, values=values)if __name__ == "__main__":    root = tk.Tk()    app = ExcelMergerApp(root)    root.mainloop()

完毕!!感谢您的收看

------★★历史博文集合★------

Python入门篇  进阶篇  视频教程  Py安装

py项目Python模块 Python爬虫  Json

Xpath正则表达式SeleniumEtreeCss

Gui程序开发TkinterPyqt5 列表元组字典

数据可视化   matplotlib   词云图Pyecharts

海龟画图PandasBug处理电脑小知识

自动化脚本编程工具NumPy CSVWeb

Pygame  图像处理  机器学习数据库