def load_excel(self, filename, menu_label, selected_label_text): self.la = menu_label self.workbook = xl.load_workbook(filename) self.sheet_names = sorted(self.workbook.sheetnames) # 按工作表名称从小到大排序 self.selected_label.config(text=selected_label_text) # 更新选中标签文本 data4 = self.la if not data4.endswith('.xlsx'): data4 += '.xlsx' # 拼接完整的文件路径 filepath = os.path.join(r'\pcq-smt-ftp01\smt$\CQ SMT-單板測試課\2.生產組\點檢表\點檢歷史資料', data4) # 清空左侧面板 for widget in self.sheet_frame.winfo_children(): widget.destroy() # 清空右下側面板 for widget in self.unique_listbox.winfo_children(): widget.destroy() # 在右下側添加文本標簽 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) # 打开文件并筛选 workboo = openpyxl.Workbook(filepath) sheet = workboo['Sheet'] today = datetime.datetime.now().strftime('%Y/%m/%d') for row in sheet.iter_rows(min_row=3, values_only=True): if row[2] == today: if row[8] == sheet_name: label.config(text=sheet_name + '(已點檢)') break這個代碼報KeyError: 'Worksheet Sheet does not exist.'怎麽修改
时间: 2024-01-13 12:02:40 浏览: 97
这个错误提示是因为你使用了openpyxl库中的`Workbook`对象来打开Excel文件,并且尝试使用`Sheet`这个名称来引用工作表。但是,在openpyxl中,默认的工作表名称是`Sheet1`而不是`Sheet`,因此会出现`Worksheet Sheet does not exist`这个错误。
要解决这个问题,你需要将下面这行代码:
```
sheet = workboo['Sheet']
```
修改为:
```
sheet = workboo['Sheet1']
```
这样就可以正确地引用Excel文件中的工作表了。不过,你需要根据实际情况来确定是否需要引用`Sheet1`这个名称,或者其他的工作表名称。
相关问题
def load_excel(self, filename, menu_label, selected_label_text): for widget in self.sheet_frame.winfo_children(): widget.destroy() for widget in self.unique_listbox.winfo_children(): widget.destroy() self.la = menu_label self.workbook = xl.load_workbook(filename) self.sheet_names = sorted(self.workbook.sheetnames) self.selected_label.config(text=selected_label_text)給這段代碼后面添加注解
这段代码定义了一个名为 "load_excel" 的方法,它接受三个参数:文件名、菜单标签和选定标签的文本。这个方法的作用是加载 Excel 文件,并将 Excel 文件中的数据显示在界面上。
首先,代码使用 "winfo_children()" 方法清空了 "sheet_frame" 和 "unique_listbox" 中的所有子部件。然后,代码设置了 "la" 属性为 "menu_label" 参数,"workbook" 属性为使用 "xl.load_workbook()" 方法加载的 Excel 文件,"sheet_names" 属性为工作簿中所有工作表的名称列表。
最后,代码将 "selected_label" 的文本属性设置为 "selected_label_text" 参数。
该方法没有返回值,但它对界面进行了更新。
def load_excel(self, filename, menu_label, selected_label_text): self.la = menu_label self.workbook = xl.load_workbook(filename) self.sheet_names = sorted(self.workbook.sheetnames) # 按工作表名称从小到大排序 self.selected_label.config(text=selected_label_text) # 更新选中标签文本 # 清空左侧面板 for widget in self.sheet_frame.winfo_children(): widget.destroy() # 添加工作表按钮 for i, sheet_name in enumerate(self.sheet_names): button = tk.Button(self.sheet_frame, text=sheet_name, command=lambda name=sheet_name: self.show_sheet(name)) button.grid(row=i, column=0, sticky="ew", padx=1, pady=1)根據這個代碼在添加一個將讀取的excel工作表的表名生成文字標簽,就只是一個文字標簽顯示到這個列表框中# 创建标签和列表框 unique_label = tk.Label(text_frame, text="唯一值:") unique_label.pack(side=tk.LEFT, padx=5) self.unique_listbox = tk.Listbox(unique_frame) self.unique_listbox.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)橫著放每五個一行
您的问题是如何将读取的Excel工作表的表名生成文字标签,并且将其显示到列表框中横着放每五个一行?
您可以在添加工作表按钮的循环中添加以下代码来生成并显示文字标签:
```
# 添加工作表标签
label = tk.Label(self.sheet_frame, text=sheet_name)
label.grid(row=i, column=1, sticky="w", padx=5, pady=1)
```
其中,`text`参数为表名,`row`和`column`参数分别为标签在网格布局中的行数和列数,`sticky`参数表示对齐方式,`padx`和`pady`参数表示标签边缘与网格单元格边缘之间的距离。
而横着放每五个一行,您可以在添加工作表按钮的循环中添加以下代码:
```
if i % 5 == 0:
self.sheet_frame.grid_columnconfigure(i//5, weight=1)
self.sheet_frame.grid(row=i//5, column=i%5, sticky="nsew", padx=1, pady=1)
```
其中,`grid_columnconfigure`方法用于设置网格布局中的列权重,使得每五个按钮为一行,`i//5`和`i%5`分别表示按钮所在的行数和列数,`sticky`参数表示对齐方式,`padx`和`pady`参数表示按钮边缘与网格单元格边缘之间的距离。
阅读全文