class FileMergeApp(ttk.Frame):
"""文件合并统计分析界面"""
def __init__(self, master):
super().__init__(master)
self.pack(fill=tk.BOTH, expand=True)
# 创建标题
title_label = tk.Label(
self,
text="Excel文件合并统计分析",
font=("黑体", 16, "bold"),
fg="#2c3e50"
)
title_label.pack(pady=20)
# 创建说明标签
desc_label = tk.Label(
self,
text="此功能用于合并多个Excel文件并生成统计分析报告",
font=("宋体", 12),
fg="#7f8c8d"
)
desc_label.pack(pady=10)
# 创建功能容器
container = ttk.Frame(self)
container.pack(fill=tk.BOTH, expand=True, padx=50, pady=20)
container.columnconfigure(0, weight=1)
container.rowconfigure((0, 1, 2, 3), weight=1)
# 添加文件选择区域
file_frame = ttk.LabelFrame(container, text="选择Excel文件")
file_frame.grid(row=0, column=0, sticky="ew", pady=10)
self.file_listbox = tk.Listbox(file_frame, height=6)
self.file_listbox.pack(fill=tk.BOTH, expand=True, padx=10, pady=5)
btn_frame = ttk.Frame(file_frame)
btn_frame.pack(fill=tk.X, padx=10, pady=5)
add_btn = ttk.Button(btn_frame, text="添加文件", command=self.add_files)
add_btn.pack(side=tk.LEFT, padx=5)
remove_btn = ttk.Button(btn_frame, text="移除选中", command=self.remove_file)
remove_btn.pack(side=tk.LEFT, padx=5)
clear_btn = ttk.Button(btn_frame, text="清空列表", command=self.clear_files)
clear_btn.pack(side=tk.RIGHT, padx=5)
# 添加合并选项
options_frame = ttk.LabelFrame(container, text="合并选项")
options_frame.grid(row=1, column=0, sticky="ew", pady=10)
self.header_var = tk.BooleanVar(value=True)
header_cb = ttk.Checkbutton(
options_frame,
text="包含标题行",
variable=self.header_var
)
header_cb.grid(row=0, column=0, padx=10, pady=5, sticky="w")
self.merge_var = tk.StringVar(value="append")
ttk.Radiobutton(
options_frame,
text="追加数据",
variable=self.merge_var,
value="append"
).grid(row=0, column=1, padx=10, pady=5, sticky="w")
ttk.Radiobutton(
options_frame,
text="按列合并",
variable=self.merge_var,
value="columns"
).grid(row=0, column=2, padx=10, pady=5, sticky="w")
# 添加统计选项
stats_frame = ttk.LabelFrame(container, text="统计分析")
stats_frame.grid(row=2, column=0, sticky="ew", pady=10)
self.stats_vars = {
"summary": tk.BooleanVar(value=True),
"count": tk.BooleanVar(value=True),
"avg": tk.BooleanVar(value=True),
"minmax": tk.BooleanVar(value=True)
}
ttk.Checkbutton(
stats_frame,
text="生成汇总统计",
variable=self.stats_vars["summary"]
).grid(row=0, column=0, padx=10, pady=5, sticky="w")
ttk.Checkbutton(
stats_frame,
text="计数统计",
variable=self.stats_vars["count"]
).grid(row=0, column=1, padx=10, pady=5, sticky="w")
ttk.Checkbutton(
stats_frame,
text="平均值计算",
variable=self.stats_vars["avg"]
).grid(row=0, column=2, padx=10, pady=5, sticky="w")
ttk.Checkbutton(
stats_frame,
text="极值分析",
variable=self.stats_vars["minmax"]
).grid(row=0, column=3, padx=10, pady=5, sticky="w")
# 添加执行按钮
execute_btn = ttk.Button(
container,
text="开始合并与分析",
command=self.start_merge,
style="Accent.TButton"
)
execute_btn.grid(row=3, column=0, pady=20)
# 配置样式
self.style = ttk.Style()
self.style.configure("Accent.TButton",
foreground="white",
background="#3498db",
font=("Arial", 10, "bold"),
padding=6)
def add_files(self):
files = filedialog.askopenfilenames(
filetypes=[("Excel文件", "*.xls *.xlsx")]
)
for file in files:
if file not in self.file_listbox.get(0, tk.END):
self.file_listbox.insert(tk.END, file)
def remove_file(self):
selected = self.file_listbox.curselection()
if selected:
self.file_listbox.delete(selected[0])
def clear_files(self):
self.file_listbox.delete(0, tk.END)
def start_merge(self):
if self.file_listbox.size() == 0:
messagebox.showwarning("警告", "请至少添加一个Excel文件")
return
# 模拟处理过程
messagebox.showinfo("提示", "文件合并与分析功能正在开发中...")
功能界面:文件合并统计分析界面 (FileMergeApp)
文件列表:添加、移除和清空Excel文件
合并选项:指定列不合并:[]、工作页合并、区块合并、按列合并。指定列不合并:[]输入指定列A/B/C/D...数据不参与合并,工作页合并:将每个Excel文件工作页合并到同一个文件不同工作页中,区块合并:将每个Excel文件工作页当前数据行合并到同一个文件同一个工作页中,按列合并:合并列对应的合并单元格数据进行判断?若为数值则进行相加,若为字符串则先去重,不同字符串以'、'间隔并排合并在一个单元格
统计分析选项:汇总统计、计数统计
执行按钮:开始合并与分析。开始合并与分析:点击执行以上功能,另存生成一个(*.xls)和(*.xlsx)后缀的Excel文件新文件同时弹出一个文本浏览框,可手动选择该Excel新文件保存的路径位置和文件名。该文件生成后自动在其文件名后缀加上当前生成时间戳。