使用 Python 3 和 tkinter 写一个表格处理客服端程序,GUI界面上有2个文本框2个按钮,按钮名称分别叫导入表格、处理表格1,当点击导入表格按钮时,导入要处理的表格,将路径存储到文本框中。点击处理表格1按钮时,获取第4个工作表到最后一个工作表中的数据,将获取的每一个工作表中的B4到倒数第2行,C4到倒数第2行的数据依次填入第3个工作表的B4到最后一行,C4到最后一行中,处理完成后,在第二个文本框中显示结果。
时间: 2024-02-12 11:08:11 浏览: 80
好的,下面是修改后的代码:
```python
import tkinter as tk
import pandas as pd
class TableProcessor:
def __init__(self, master):
self.master = master
master.title("表格处理客户端")
# 创建GUI界面的部件
self.textbox1 = tk.Entry(master, width=50)
self.textbox2 = tk.Entry(master, width=50)
self.button1 = tk.Button(master, text="导入表格", command=self.import_file)
self.button2 = tk.Button(master, text="处理表格1", command=self.process_file1)
# 将部件放置在GUI界面上
self.textbox1.grid(row=0, column=0, padx=5, pady=5, columnspan=2)
self.textbox2.grid(row=1, column=0, padx=5, pady=5, columnspan=2)
self.button1.grid(row=2, column=0, padx=5, pady=5)
self.button2.grid(row=2, column=1, padx=5, pady=5)
def import_file(self):
# 导入表格并将路径存储到第一个文本框中
file_path = tk.filedialog.askopenfilename(filetypes=[("Excel files", "*.xlsx")])
self.textbox1.delete(0, tk.END)
self.textbox1.insert(0, file_path)
def process_file1(self):
# 获取第4个工作表到最后一个工作表中的数据
file_path = self.textbox1.get()
xls = pd.ExcelFile(file_path)
df_list = []
for i in range(3, len(xls.sheet_names)):
df = pd.read_excel(xls, sheet_name=i, usecols="B:C")
df_list.append(df)
result = pd.concat(df_list, ignore_index=True)
# 将获取的数据依次填入第3个工作表的B4到最后一行,C4到最后一行中
file_path = file_path.replace(".xlsx", "_result.xlsx")
writer = pd.ExcelWriter(file_path, engine="openpyxl") # 修改为openpyxl
writer.book = pd.load_workbook(file_path) # 加载现有的工作簿
for i in range(len(xls.sheet_names)):
df = pd.read_excel(xls, sheet_name=i)
if i == 2:
df["B4"] = result["B"]
df["C4"] = result["C"]
df.to_excel(writer, sheet_name=xls.sheet_names[i], index=False)
else:
df.to_excel(writer, sheet_name=xls.sheet_names[i], index=False)
writer.save()
# 在第二个文本框中显示结果
self.textbox2.delete(0, tk.END)
self.textbox2.insert(0, file_path)
root = tk.Tk()
app = TableProcessor(root)
root.mainloop()
```
相比之前的代码,我们将第二个按钮“处理表格2”删除了,并将第一个按钮的名称修改为“导入表格”。同时,在`process_file1`函数中,我们使用`openpyxl`模块来替换掉`xlsxwriter`模块。具体来说,我们将`ExcelWriter`对象的`engine`参数修改为`openpyxl`,并使用`load_workbook`函数来加载现有的工作簿。这样一来,就可以避免在处理表格时,覆盖掉原有的格式和样式了。
其余的部分与之前的代码相同,你可以尝试运行一下看看效果。
阅读全文