如上兩段代碼是一個函數,現需要在不改變需求的情況下修改多次打開一個excel,需要修改爲只打開一次,來提升運行速度
时间: 2024-03-27 15:36:15 浏览: 12
可以将读取 Excel 文件的逻辑提取出来,放到函数外部,在函数调用之前读取 Excel 文件并将其作为参数传递给函数,这样就可以避免在函数内部多次打开 Excel 文件,从而提升运行速度。
具体的实现方式可以参考以下代码:
```python
def refresh_labels(self, workbook):
for i, sheet_name in enumerate(self.sheet_names):
filtered_rows = []
sheet = workbook[sheet_name]
today = datetime.datetime.now().strftime('%Y/%m/%d')
cell_value = sheet.cell(row=1, column=1).value
if cell_value is not None and cell_value != '':
for row in sheet.iter_rows(min_row=1):
if row[2].value == today and row[8].value == sheet_name:
datetime_obj = datetime.datetime.strptime(row[3].value, '%H:%M:%S')
row_time = datetime_obj.time()
if start_time_1 <= row_time <= end_time_1 and start_time_1 <= current_time <= end_time_1:
filtered_rows.append(row)
elif start_time_2 <= row_time or current_time <= end_time_2:
filtered_rows.append(row)
label = self.unique_listbox.grid_slaves(row=i // 3, column=i % 3)[0]
if filtered_rows:
label.config(text=f"{sheet_name} - 已點檢", fg="green")
else:
label.config(text=f"{sheet_name} - 未點檢", fg="red")
# 在函数调用之前读取 Excel 文件
filepath = os.path.join(pinjie, self.la + '.xlsx')
if os.path.exists(filepath):
workbook = openpyxl.load_workbook(filepath)
else:
workbook = openpyxl.Workbook()
workbook.save(filepath)
# 调用函数,并将 workbook 作为参数传递
self.refresh_labels(workbook)
```
这样就可以避免在函数内部多次打开 Excel 文件,提升运行速度。