使用 Python 3 和 tkinter 写一个表格处理程序,GUI界面为:2个文本框2个按钮,按钮名称分别叫导入表格、处理表格。 点击“导入表格”按钮导入多个需要处理的表格文件显示在第一个文本框中。点击“处理表格”按钮,新建一个名称为“汇总表”的表格文件,然后将每一个导入表格的第一个工作表复制粘贴(包括格式)到汇总表中的多个工作表中。
时间: 2024-02-12 18:06:24 浏览: 59
以下是修改后的程序,实现了您的需求。同样地,该程序仅支持处理 xlsx 格式的表格文件。
```python
import tkinter as tk
from tkinter import filedialog
import openpyxl
class TableProcessor:
def __init__(self):
self.root = tk.Tk()
self.root.title("表格处理程序")
# 第一个文本框用于显示需要处理的表格文件路径
self.file_paths_text = tk.Text(self.root, height=5)
self.file_paths_text.pack(pady=10)
# "导入表格"按钮
import_button = tk.Button(self.root, text="导入表格", command=self.import_files)
import_button.pack()
# 第二个文本框用于显示处理结果
self.result_text = tk.Text(self.root, height=5)
self.result_text.pack(pady=10)
# "处理表格"按钮
process_button = tk.Button(self.root, text="处理表格", command=self.process_files)
process_button.pack()
self.root.mainloop()
def import_files(self):
file_paths = filedialog.askopenfilenames(defaultextension=".xlsx", filetypes=[("Excel Files", "*.xlsx")])
self.file_paths_text.delete(1.0, tk.END)
self.file_paths_text.insert(tk.END, "\n".join(file_paths))
def process_files(self):
file_paths = self.file_paths_text.get(1.0, tk.END).split("\n")
file_paths = [path.strip() for path in file_paths if path.strip()]
if not file_paths:
self.result_text.delete(1.0, tk.END)
self.result_text.insert(tk.END, "请先导入表格文件")
return
result_wb = openpyxl.Workbook()
result_wb.remove_sheet(result_wb.active)
result_ws_index = 1
for file_path in file_paths:
wb = openpyxl.load_workbook(file_path)
ws = wb.active
new_ws = result_wb.create_sheet(title=f"表格{result_ws_index}")
result_ws_index += 1
for row in ws.iter_rows():
new_ws.append([cell.value for cell in row])
for col in ws.columns:
col_letter = col[0].column_letter
new_col = new_ws.column_dimensions[col_letter]
new_col.width = ws.column_dimensions[col_letter].width
for row in ws.rows:
row_height = row[0].row_dimensions.height
new_ws.row_dimensions[row[0].row].height = row_height
result_wb.save("汇总表.xlsx")
self.result_text.delete(1.0, tk.END)
self.result_text.insert(tk.END, "处理完成,结果已保存到汇总表.xlsx")
if __name__ == "__main__":
TableProcessor()
```
该程序与之前的程序类似,不同的是,它将每个导入表格的第一个工作表复制粘贴到一个新的工作表中,而不是复制到同一个工作表中。程序使用 `create_sheet()` 方法创建新的工作表,并使用 `remove_sheet()` 方法删除默认创建的工作表。程序还将每个新工作表命名为“表格1,2,3...”等,以便于区分。程序还保留了每个导入表格的列宽和行高,以确保粘贴的内容与原始表格保持一致。
请注意,该程序仅提供了基本的功能,您可以根据需要进一步完善程序。
阅读全文