Files
F6--/张阳脚本/工具/单元格包含多行文本拆分GUI.py
T
2026-01-30 11:28:35 +08:00

99 lines
3.4 KiB
Python

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()