帮我写一个程序,功能为:对一个文件夹中的多个表格合并成一个表格。软件界面上有打开文件夹可以打开要合并文件夹,有导出路径按键,可以选导出位置,有开始按键,开始整个合并为一个表格的操作,完成后显示完成两个字!
这是我想要的一个功能程序,于是用deepseek问了?!!
于是有了以下代码:
以下是一个使用Python和Tkinter编写的表格合并程序,支持合并Excel和CSV文件:
```python
import tkinter as tk
from tkinter import ttk, filedialog, messagebox
import pandas as pd
import os
import threading
class MergeApp:
def __init__(self, root):
self.root = root
root.title("表格合并工具")
root.geometry("600x250")
# 初始化变量
self.folder_path = tk.StringVar()
self.export_path = tk.StringVar()
self.status = tk.StringVar()
self.status.set("准备就绪")
# 界面布局
ttk.Label(root, text="源文件夹:").grid(row=0, column=0, padx=10, pady=10, sticky="w")
ttk.Entry(root, textvariable=self.folder_path, width=50).grid(row=0, column=1, padx=5)
ttk.Button(root, text="选择文件夹", command=self.select_folder).grid(row=0, column=2, padx=10)
ttk.Label(root, text="保存路径:").grid(row=1, column=0, padx=10, pady=10, sticky="w")
ttk.Entry(root, textvariable=self.export_path, width=50).grid(row=1, column=1, padx=5)
ttk.Button(root, text="选择路径", command=self.select_export).grid(row=1, column=2, padx=10)
self.start_btn = ttk.Button(root, text="开始合并", command=self.start_merge)
self.start_btn.grid(row=2, column=1, pady=20)
ttk.Label(root, textvariable=self.status).grid(row=3, column=1)
# 绑定事件
root.bind('<>', self.merge_success)
root.bind('<>', self.merge_error)
def select_folder(self):
folder = filedialog.askdirectory()
if folder:
self.folder_path.set(folder)
def select_export(self):
files = [("Excel文件", "*.xlsx"), ("CSV文件", "*.csv")]
filepath = filedialog.asksaveasfilename(filetypes=files, defaultextension=".xlsx")
if filepath:
self.export_path.set(filepath)
def start_merge(self):
if not self.folder_path.get() or not self.export_path.get():
messagebox.showwarning("警告", "请先选择源文件夹和保存路径")
return
self.start_btn['state'] = 'disabled'
self.status.set("正在合并中...")
# 启动合并线程
threading.Thread(target=self.merge_files, daemon=True).start()
def merge_files(self):
try:
# 获取所有支持的文件
valid_ext = ('.xlsx', '.xls', '.csv')
files = [
os.path.join(self.folder_path.get(), f)
for f in os.listdir(self.folder_path.get())
if f.lower().endswith(valid_ext)
]
if not files:
raise ValueError("没有找到可合并的文件")
# 读取并合并数据
dfs = []
for file in files:
if file.endswith(('.xlsx', '.xls')):
df = pd.read_excel(file)
elif file.endswith('.csv'):
df = pd.read_csv(file)
dfs.append(df)
combined_df = pd.concat(dfs, ignore_index=True)
# 保存文件
export_path = self.export_path.get()
if export_path.endswith('.csv'):
combined_df.to_csv(export_path, index=False)
else:
combined_df.to_excel(export_path, index=False)
self.root.event_generate('<>')
except Exception as e:
self.root.event_generate('<>', when='tail')
print(f"错误信息: {str(e)}")
def merge_success(self, event=None):
self.start_btn['state'] = 'normal'
self.status.set("合并完成!")
messagebox.showinfo("成功", "文件合并完成!")
def merge_error(self, event=None):
self.start_btn['state'] = 'normal'
self.status.set("合并出错!")
messagebox.showerror("错误", "合并过程中出现错误,请检查文件和路径")
if __name__ == "__main__":
root = tk.Tk()
app = MergeApp(root)
root.mainloop()
```
使用说明:
1. 运行程序后会显示图形界面
2. 点击"选择文件夹"按钮选择包含要合并表格文件的文件夹
3. 点击"选择路径"按钮指定合并后的文件保存位置和格式(支持.xlsx和.csv)
4. 点击"开始合并"按钮执行合并操作
5. 合并完成后会显示提示信息
程序特点:
- 支持合并Excel(.xlsx, .xls)和CSV文件
- 自动跳过非表格文件
- 合并时保留各文件的列标题(假设所有文件结构相同)
- 支持多线程操作,界面不会卡死
- 提供错误提示和状态反馈
- 自动创建保存路径所需的目录
注意:
- 需要安装pandas和openpyxl库(处理Excel文件)
- 所有要合并的表格文件应有相同的列结构
- 合并时会自动跳过隐藏文件和非表格文件
- 建议将相同格式的文件放在源文件夹中
安装依赖:
```bash
pip install pandas openpyxl
```
领取专属 10元无门槛券
私享最新 技术干货