Python嵌套for循环导出Tkinter表单数据到Excel出现重复值求助
问题修复方案
根因定位
你代码的核心错误出在guardar_datos函数的循环逻辑:
my_entries存的是第一列10个输入框,my_entries1存的是第二列10个输入框,二者是同一行一一对应的关系- 你用了双重嵌套循环,相当于第一列每一个输入框都会和第二列所有10个输入框配对写入,自然会出现大量重复值
- 写数据后再删行的逻辑会导致行号计数混乱,进一步加重数据错位问题
修复后的核心函数
把原有guardar_datos替换为以下内容即可解决重复写入问题:
def guardar_datos(): # 写入Excel表头,和GUI列名对应 hoja.cell(row=1, column=1, value="CUIJ").font = Font(name='Arial', size=13, bold=True) hoja.cell(row=1, column=2, value="Observación").font = Font(name='Arial', size=13, bold=True) fila = 2 valor = "21-0" # 按行配对两列输入框,保证和GUI的行列对应关系完全一致 for entry_cuij, entry_obs in zip(my_entries, my_entries1): cuij_val = entry_cuij.get().strip() obs_val = entry_obs.get().strip() # 提前做数据校验,不符合要求的行直接跳过不写入,避免频繁删行导致的计数混乱 if len(cuij_val) <= 4 or cuij_val.isalpha(): continue if not obs_val: continue # 校验通过后再写入当前行的两列数据 hoja.cell(row=fila, column=1, value=valor+cuij_val).font = Font(name='Arial', size=13) hoja.cell(row=fila, column=2, value=obs_val).font = Font(name='Arial', size=13) fila += 1 book.save('C:\\Programa_pases\\lista_CUIJ.xlsx')
可选优化
你创建GUI表头的代码放在了10次循环里,会重复创建10次完全相同的标签,建议移到循环外减少冗余:
# 提前创建表头,不要放在y循环内部 my_label = Label(root,text="CUIJ",font = "Arial 24 bold") my_label.grid(row=0,column=0,sticky="N") my_label1 = Label(root,text="Observación",font = "Arial 24 bold") my_label1.grid(row=0,column=1,sticky="N") for y in range (10): my_label2 = Label(root, width=5,text="21-0",font = "Arial 12").grid(padx=5, pady=5,sticky = 'w', row=y+1, column=0) my_label3 = Label(root, width=5,text="Observ",font = "Arial 12").grid(padx=5, pady=5,sticky = 'w', row=y+1, column=1) # 原有输入框创建逻辑保持不变
内容的提问来源于stack exchange,提问作者Juan Bertone
相关产品推荐
相关产品推荐

