使用 Python 3 和 tkinter 写一个excle表处理程序,GUI界面为:2个文本框2个按钮,按钮名称分别叫导入表格、处理表格。 点击“导入表格”按钮导入多个需要处理的表格文件显示在第一个文本框中。点击“处理表格”按钮,将每一个导入的表格的第一给工作表的名称改为与表格文件名一致,然后将每一个导入表格的第一个工作表合并到一个表格中,表格保存到该文件夹下,表格名称叫汇总表。
时间: 2024-02-12 12:06:18 浏览: 74
关于使用tkinter库进行python GUI程序开发
好的,我可以帮您解决这个问题。首先,您需要安装 `openpyxl` 库来读取和写入 Excel 文件,以及 `tkinter` 库来创建 GUI 界面。
以下是实现的代码:
```python
import os
from tkinter import *
from tkinter import filedialog
from openpyxl import load_workbook
from openpyxl.utils import get_column_letter
from openpyxl.utils.cell import column_index_from_string
from openpyxl.styles import Font, Alignment
from openpyxl.worksheet.table import Table, TableStyleInfo
class ExcelProcessor:
def __init__(self, master):
self.master = master
master.title("Excel表处理程序")
master.geometry("500x200")
self.file_paths = []
self.import_label = Label(master, text="待处理文件:")
self.import_label.grid(row=0, column=0)
self.import_textbox = Text(master, height=3, width=50)
self.import_textbox.grid(row=1, column=0)
self.import_button = Button(master, text="导入表格", command=self.import_files)
self.import_button.grid(row=2, column=0)
self.process_button = Button(master, text="处理表格", command=self.process_files)
self.process_button.grid(row=2, column=1)
self.process_label = Label(master, text="")
self.process_label.grid(row=3, column=0)
def import_files(self):
file_paths = filedialog.askopenfilenames(title="选择需要处理的Excel文件", filetypes=(("Excel files", "*.xlsx"), ("all files", "*.*")))
self.file_paths = file_paths
self.import_textbox.delete('1.0', END)
for path in self.file_paths:
self.import_textbox.insert(END, path + "\n")
def process_files(self):
for path in self.file_paths:
wb = load_workbook(path)
ws = wb.active
ws.title = os.path.splitext(os.path.basename(path))[0]
# 计算表格的行数和列数
max_row = ws.max_row
max_col = ws.max_column
# 合并表格
data = []
for i in range(1, max_row + 1):
row_data = []
for j in range(1, max_col + 1):
cell = ws.cell(row=i, column=j)
row_data.append(cell.value)
data.append(row_data)
# 创建汇总表格
if not os.path.exists("汇总表.xlsx"):
wb2 = Workbook()
ws2 = wb2.active
ws2.title = "汇总表"
wb2.save("汇总表.xlsx")
else:
wb2 = load_workbook("汇总表.xlsx")
ws2 = wb2.active
# 将数据写入汇总表格
header = [chr(i) for i in range(ord('A'), ord('Z')+1)]
for i, row in enumerate(data):
for j, value in enumerate(row):
col_letter = get_column_letter(j+1)
col_index = column_index_from_string(col_letter)
ws2.cell(row=i+2, column=col_index).value = value
# 格式化汇总表格
max_col2 = ws2.max_column
max_row2 = ws2.max_row
data_range = f"A1:{get_column_letter(max_col2)}{max_row2}"
tab = Table(displayName="Table1", ref=data_range)
style = TableStyleInfo(name="TableStyleMedium9", showFirstColumn=False,
showLastColumn=False, showRowStripes=True, showColumnStripes=False)
tab.tableStyleInfo = style
ws2.add_table(tab)
for i in range(1, max_col2+1):
col_letter = get_column_letter(i)
col_index = column_index_from_string(col_letter)
ws2.cell(row=1, column=col_index).font = Font(bold=True)
ws2.cell(row=1, column=col_index).alignment = Alignment(horizontal='center')
wb2.save("汇总表.xlsx")
self.process_label.config(text="处理完成!")
root = Tk()
app = ExcelProcessor(root)
root.mainloop()
```
这个程序创建了一个 GUI 界面,包含两个按钮和两个文本框。当用户点击“导入表格”按钮时,程序会打开一个文件选择对话框,让用户选择需要处理的 Excel 文件。选定的文件路径会显示在第一个文本框中。当用户点击“处理表格”按钮时,程序会依次处理每个 Excel 文件,将每个文件的第一个工作表合并到一个汇总表格中,并保存到该文件夹下,表格名称为“汇总表.xlsx”。
注意,为了避免用户在处理表格时意外关闭程序,我们在创建 GUI 界面时使用了 `mainloop()` 函数,这个函数会持续监听用户的输入,直到用户关闭窗口才会退出程序。
阅读全文