def read_device_excel( ): ip_list = [] filepath = askopenfilename(filetypes=[("Excel files", "*.xlsx")]) wb1 = load_workbook(filepath) ws1 = wb1.get_sheet_by_name("Sheet1") # wb1 = load_workbook('E:/Users/Wayne_Peng/Desktop/cs_lab.xlsx') # ws1 = wb1.get_sheet_by_name("Sheet1") # ws1 = wb1['Sheet1'] # 创建一个窗口 root = Tk() # 创建一个按钮 button = Button(root, text="选择文件", command=read_device_excel) button.pack() # 进入消息循环 root.mainloop() for cow_num in range(2, ws1.max_row+1): ipaddr = ws1["B"+str(cow_num)].value ntos = ws1["C"+str(cow_num)].value name = ws1["D"+str(cow_num)].value pswd = ws1["E"+str(cow_num)].value epswd = ws1["F"+str(cow_num)].value inscmd = ws1["G"+str(cow_num)].value ip_list.append((ipaddr, ntos, name, pswd, epswd, inscmd)) # print (ip_list) return ip_list这段代码如何优化,选择了文件后我并没有自动进入循环
时间: 2024-01-28 09:05:50 浏览: 25
首先,需要将窗口的主循环放在函数外部,这样才能在选择文件后继续执行代码。同时,需要对函数进行异常处理,防止出现文件不存在或者文件格式错误的情况。以下是优化后的代码:
```
from tkinter import *
from tkinter.filedialog import askopenfilename
from openpyxl import load_workbook
def read_device_excel():
ip_list = []
try:
filepath = askopenfilename(filetypes=[("Excel files", "*.xlsx")])
wb1 = load_workbook(filepath)
ws1 = wb1['Sheet1']
for cow_num in range(2, ws1.max_row+1):
ipaddr = ws1["B"+str(cow_num)].value
ntos = ws1["C"+str(cow_num)].value
name = ws1["D"+str(cow_num)].value
pswd = ws1["E"+str(cow_num)].value
epswd = ws1["F"+str(cow_num)].value
inscmd = ws1["G"+str(cow_num)].value
ip_list.append((ipaddr, ntos, name, pswd, epswd, inscmd))
return ip_list
except Exception as e:
print("读取Excel文件出错:", e)
return []
root = Tk()
button = Button(root, text="选择文件", command=read_device_excel)
button.pack()
root.mainloop()
```
在优化后的代码中,我们使用了 try-except 语句对函数中的代码进行异常处理,防止出现文件不存在或者文件格式错误的情况。同时将主循环放在函数外部,这样在选择文件后就可以继续执行代码。