import tkinter as tk from tkinter import filedialog, messagebox, ttk import pandas as pd def select_file(): """打开文件对话框并显示所选文件路径""" file_path = filedialog.askopenfilename() if file_path: file_entry.delete(0, tk.END) file_entry.insert(0, file_path) def load_sheet_names(): """加载所选文件的工作表名称""" file_path = file_entry.get() if not file_path: messagebox.showerror("错误", "请选择一个文件") return try: xls = pd.ExcelFile(file_path) sheet_names = xls.sheet_names sheet_dropdown['values'] = sheet_names sheet_dropdown.current(0) except Exception as e: messagebox.showerror("错误", f"无法读取工作表: {str(e)}") def process_data(): """处理数据并保存结果""" file_path = file_entry.get() sheet_name = sheet_dropdown.get() column_name = column_entry.get() separator = separator_entry.get() if not file_path or not sheet_name or not column_name or not separator: messagebox.showerror("错误", "请填写所有字段") return try: # 读取Excel文件 df = pd.read_excel(file_path, sheet_name=sheet_name, dtype='string') # 展示原始数据 print("原始数据:") print(df) # 定义拆分函数 def split_column_into_rows(dataframe, column_name, separator): s = dataframe[column_name].str.split(separator).explode() result = dataframe.drop(columns=[column_name]).join(s.rename(column_name)).reset_index(drop=True) return result # 调用函数并传入参数 result_df = split_column_into_rows(df, column_name, separator) # 展示处理后的数据 print("\n处理后的数据:") print(result_df) # 保存到新的Excel文件 output_file = f'{sheet_name}.xlsx' result_df.to_excel(output_file, index=False) messagebox.showinfo("成功", f"数据已保存到 {output_file}") except Exception as e: messagebox.showerror("错误", f"处理过程中出现错误: {str(e)}") # 创建主窗口 root = tk.Tk() root.title("Excel 数据处理工具") # 文件选择部分 tk.Label(root, text="选择文件:").grid(row=0, column=0, padx=10, pady=5) file_entry = tk.Entry(root, width=50) file_entry.grid(row=0, column=1, padx=10, pady=5) file_button = tk.Button(root, text="浏览", command=select_file) file_button.grid(row=0, column=2, padx=10, pady=5) # 工作表选择部分 tk.Label(root, text="选择工作表:").grid(row=1, column=0, padx=10, pady=5) sheet_dropdown = tk.ttk.Combobox(root, values=[], state="readonly") sheet_dropdown.grid(row=1, column=1, padx=10, pady=5) load_sheets_button = tk.Button(root, text="加载工作表", command=load_sheet_names) load_sheets_button.grid(row=1, column=2, padx=10, pady=5) # 列名输入部分 tk.Label(root, text="输入列名:").grid(row=2, column=0, padx=10, pady=5) column_entry = tk.Entry(root, width=50) column_entry.grid(row=2, column=1, padx=10, pady=5) # 分隔符输入部分 tk.Label(root, text="输入分隔符:").grid(row=3, column=0, padx=10, pady=5) separator_entry = tk.Entry(root, width=50) separator_entry.grid(row=3, column=1, padx=10, pady=5) # 处理按钮 process_button = tk.Button(root, text="处理数据", command=process_data) process_button.grid(row=4, column=0, columnspan=3, pady=20) # 运行主循环 root.mainloop()