You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 14:27:02