import os
import shutil
import tkinter as tk
from tkinter import filedialog, messagebox
def select_folders():
selected_dirs = filedialog.askdirectory(mustexist=True)
if selected_dirs:
folder_list.extend(selected_dirs)
folders_display.set('\n'.join(folder_list))
def select_merge_folder():
merge_dir = filedialog.askdirectory(mustexist=True)
if merge_dir:
merge_folder_display.set(merge_dir)
def run_process():
file_type = selected_file_type.get()
if not folder_list or not merge_folder_display.get():
messagebox.showwarning("警告", "请选择有效的文件夹")
return
target_folder_name = "pdf" if file_type == ".pdf" else "xlsx"
target_folder_path = os.path.join(merge_folder_display.get(), target_folder_name)
os.makedirs(target_folder_path, exist_ok=True)
file_list = []
for folder in folder_list:
for root, _, files in os.walk(folder):
for file in files:
if file.endswith(file_type):
full_path = os.path.join(root, file)
shutil.copy(full_path, target_folder_path)
file_list.append((file, os.path.abspath(full_path)))
excel_filepath = os.path.join(merge_folder_display.get(), f"files_list_{target_folder_name}.xlsx")
try:
import openpyxl
workbook = openpyxl.Workbook()
sheet = workbook.active
for row_num, (file_name, file_path) in enumerate(file_list, start=1):
sheet.cell(row=row_num, column=1, value=file_name)
sheet.cell(row=row_num, column=2).hyperlink = file_path
sheet.cell(row=row_num, column=2, value="打开")
workbook.save(excel_filepath)
messagebox.showinfo("完成", f"文件已整理到 {target_folder_path},Excel 表已生成")
except ImportError:
messagebox.showerror("错误", "需要安装 openpyxl 模块")
app = tk.Tk()
app.title("文档整理程序")
selected_file_type = tk.StringVar(value=".pdf")
tk.Label(app, text="请选择需要整理的文件类型").grid(row=0, column=0, columnspan=2)
tk.Radiobutton(app, text=".pdf", variable=selected_file_type, value=".pdf").grid(row=1, column=0)
tk.Radiobutton(app, text=".xlsx", variable=selected_file_type, value=".xlsx").grid(row=1, column=1)
folder_list = []
folders_display = tk.StringVar()
tk.Button(app, text="请选择需要提取数据的文件夹,可选多个", command=select_folders).grid(row=2, column=0, columnspan=2)
tk.Label(app, textvariable=folders_display, anchor="w", justify="left").grid(row=3, column=0, columnspan=2)
merge_folder_display = tk.StringVar()
tk.Button(app, text="请选择提取数据归并的文件夹", command=select_merge_folder).grid(row=9, column=0, columnspan=2)
tk.Label(app, textvariable=merge_folder_display, anchor="w", justify="left").grid(row=10, column=0, columnspan=2)
tk.Button(app, text="运行", command=run_process).grid(row=11, column=0, columnspan=2)
app.mainloop()