修改後的完整代碼
时间: 2023-08-07 07:17:35 浏览: 44
好的,以下是修改后的完整代码,你可以参考一下:
```python
import os
import datetime
import tkinter as tk
import openpyxl as xl
class App:
def __init__(self, master):
self.master = master
master.title("Excel Reader")
# 初始化界面
self.init_ui()
def init_ui(self):
# 创建顶层框架
self.top_frame = tk.Frame(self.master)
self.top_frame.pack(side="top", padx=10, pady=(10, 0))
# 创建标签和下拉菜单
self.label = tk.Label(self.top_frame, text="选择文件:")
self.label.pack(side="left")
self.file_var = tk.StringVar()
self.file_menu = tk.OptionMenu(self.top_frame, self.file_var, "")
self.file_menu.pack(side="left", padx=10)
# 创建按钮
self.button = tk.Button(self.top_frame, text="打开", command=self.open_file)
self.button.pack(side="left")
# 创建中间框架
self.middle_frame = tk.Frame(self.master)
self.middle_frame.pack(padx=10, pady=10)
# 创建标签和列表框
self.selected_label = tk.Label(self.middle_frame, text="选择工作表:")
self.selected_label.grid(row=0, column=0)
self.sheet_frame = tk.Frame(self.middle_frame)
self.sheet_frame.grid(row=1, column=0)
self.unique_listbox = tk.Frame(self.middle_frame, relief="ridge", bd=2)
self.unique_listbox.grid(row=1, column=1, padx=10)
# 创建底部框架和标签
self.bottom_frame = tk.Frame(self.master)
self.bottom_frame.pack(side="bottom", padx=10, pady=(0, 10))
self.status_label = tk.Label(self.bottom_frame, text="")
self.status_label.pack()
def open_file(self):
# 打开文件对话框并获取选择的文件名
filename = tk.filedialog.askopenfilename(filetypes=[("Excel Files", "*.xlsx")])
if filename:
# 保存文件名并更新下拉菜单
self.file_var.set(filename)
self.update_file_menu()
def update_file_menu(self):
# 更新下拉菜单中的文件列表
filename = self.file_var.get()
if filename:
self.workbook = xl.load_workbook(filename)
self.sheet_names = sorted(self.workbook.sheetnames)
self.sheet_menu = tk.Menu(self.file_menu)
for sheet_name in self.sheet_names:
self.sheet_menu.add_command(label=sheet_name, command=lambda name=sheet_name: self.update_sheet_label(name))
self.file_menu['menu'] = self.sheet_menu
# 清空左侧面板
for widget in self.sheet_frame.winfo_children():
widget.destroy()
# 清空右下侧面板
for widget in self.unique_listbox.winfo_children():
widget.destroy()
# 在左侧添加标签
self.sheet_label = tk.Label(self.sheet_frame, text="")
self.sheet_label.pack()
# 在右下侧添加标签
for i, sheet_name in enumerate(self.sheet_names):
label = tk.Label(self.unique_listbox, text=sheet_name)
label.grid(row=i // 5, column=i % 5, sticky="ew", padx=1, pady=1)
def update_sheet_label(self, sheet_name):
# 更新左侧标签文本
self.sheet_label.config(text=sheet_name)
# 清空右下侧面板
for widget in self.unique_listbox.winfo_children():
widget.destroy()
# 获取所选标签文本
selected_label_text = self.selected_label.cget("text")
if selected_label_text:
# 读取第3列日期和第9列文本内容
for i, sheet_name in enumerate(self.sheet_names):
sheet = self.workbook[sheet_name]
for row in sheet.iter_rows(min_row=2, values_only=True):
date = row[2] # 第3列为日期列
text = row[8] # 第9列为文本内容列
if isinstance(date, datetime.date) and date == datetime.date.today() and text == selected_label_text:
# 如果日期为今天并且文本内容与所选标签文本相同,则在标签后面添加已点检
label = tk.Label(self.unique_listbox, text=f"{sheet_name} 已点检")
label.grid(row=i // 5, column=i % 5, sticky="ew", padx=1, pady=1)
break
else:
# 如果当前工作表中没有符合条件的行,则在标签后面添加未点检
label = tk.Label(self.unique_listbox, text=f"{sheet_name} 未点检")
label.grid(row=i // 5, column=i % 5, sticky="ew", padx=1, pady=1)
else:
# 如果没有选择标签,则在标签后面添加未点检
for i, sheet_name in enumerate(self.sheet_names):
label = tk.Label(self.unique_listbox, text=f"{sheet_name} 未点检")
label.grid(row=i // 5, column=i % 5, sticky="ew", padx=1, pady=1)
# 创建主窗口并运行程序
if __name__ == '__main__':
root = tk.Tk()
app = App(root)
root.mainloop()
```
代码中主要修改的部分就是在 `update_sheet_label` 函数中添加的读取第3列日期和第9列文本内容的代码,以及在遍历每个工作表中的行时,如果找到符合条件的行,则在标签后面添加“已点检”文本,否则添加“未点检”文本。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)