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

如何实现Python程序数据写入Excel?求助解决连接失败问题

问题分析与解决方案

你的代码存在几个关键问题,导致无法将数据写入Excel,以下是问题点和修正方案:

核心问题

  1. 冗余的Excel文件打开:同时用openpyxl.load_workbook和pandas.read_excel操作同一文件,会引发文件访问冲突,且openpyxl代码未实际发挥作用,需删除。
  2. Pandas数据合并错误:df.concat是错误用法,正确的方式是将用户输入的字典转换为单行DataFrame,再与原DataFrame合并。
  3. 日期控件未绑定Key:CalendarButton对应的InputText没有设置key,导致日期值无法被捕获到values字典中。
  4. 输入清空方法错误:PySimpleGUI更新控件内容需要调用update()方法,而非直接调用控件对象。

修正后的代码

import PySimpleGUI as sg
import pandas as pd

# 设置窗口主题
sg.theme('DarkTeal1')

EXCEL_FILE = '/Users/safa/Desktop/بيان اسماء المستفيدين (أرشيف)/data2.xlsx'

# 读取Excel数据,文件不存在则创建空DataFrame
try:
    df = pd.read_excel(EXCEL_FILE)
except FileNotFoundError:
    # 预定义列名,与表单key对应
    df = pd.DataFrame(columns=[
        'The file number', 'Name', 'Id number', 'Phone number',
        'The Commission', 'date1', 'Convert to', 'date2'
    ])

layout = [
    [sg.Text("Please fill out the following fields:")],
    [sg.Text("The file number", size=(16, 1)), sg.InputText(key='The file number')],
    [sg.Text("Name", size=(16, 1)), sg.InputText(key='Name')],
    [sg.Text("Id number", size=(16, 1)), sg.InputText(key='Id number')],
    [sg.Text("Phone number", size=(16, 1)), sg.InputText(key='Phone number')],
    [sg.Text('The Commission: ', size=(16, 1)), sg.Combo(
        ["doesn't deserve", "Marriage", "Housing", "broken"], key="The Commission")],
    # 修正日期控件:给InputText设置key,CalendarButton指定写入目标
    [sg.CalendarButton("Date", target='date1'), sg.InputText(key='date1')],
    [sg.Text(' Convert to ', size=(16, 1)), sg.Combo(
        ["doesn't deserve", "Marriage", "Housing", "broken"], key="Convert to")],
    [sg.CalendarButton("Date", target='date2'), sg.InputText(key='date2')],
    [sg.Submit(), sg.Exit()]
]

window = sg.Window('Simple data entry form', layout)

def clear_input():
    for key in values:
        window[key].update('')

while True:
    event, values = window.read()
    if event == sg.WINDOW_CLOSED or event == 'Exit':
        break
    if event == 'Submit':
        # 将用户输入转为单行DataFrame
        new_row = pd.DataFrame([values])
        # 合并原有数据与新数据
        df = pd.concat([df, new_row], ignore_index=True)
        # 写入Excel
        df.to_excel(EXCEL_FILE, index=False)
        sg.popup('Data has been saved')
        clear_input()

window.close()

额外优化说明

  • 添加了文件不存在的异常处理,避免首次运行因文件缺失报错。
  • 简化PySimpleGUI导入为sg,减少代码冗余。
  • 通过target参数绑定CalendarButton与InputText,确保日期值正确存入输入字典。

内容的提问来源于stack exchange,提问作者prigrammer2007

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 14:40:24