PySimpleGUI表单数据写入Excel表格功能实现求助
问题修复方案
核心问题与修正点:
- 缺失控件Key:前两个下拉框(月份、工作)未设置
key参数,导致提交时无法获取这两项输入值,Excel写入时会缺失对应列数据。 - 过时API使用:
df.append()已被Pandas弃用,改用pd.concat()实现行添加更稳定。 - 清空函数错误:原
clear_input()写法有误,需用window[key].update('')重置控件内容,同时避免空值循环报错。 - 窗口提前关闭:提交后直接关闭窗口,无法持续录入数据,需移除
window.close()。 - 文件不存在处理:首次运行若Excel文件未创建,需初始化对应列名的空DataFrame,避免读取报错。
修正后的完整代码:
import PySimpleGUI as sg import pandas as pd sg.theme('Darkpurple') EXCEL_FILE = 'Childsupport.xlsx' # 处理文件不存在的情况,初始化空DataFrame try: df = pd.read_excel(EXCEL_FILE) except FileNotFoundError: # 按表格列名初始化空DataFrame df = pd.DataFrame(columns=['Month', 'Job', 'Amount']) layout = [ [sg.Text('请填写以下字段:')], [sg.Text('选择月份:'), sg.Combo( ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], size=(15,1), key='Month' )], [sg.Text('选择工作:')], [sg.Combo(['Job 1', 'Job 2'], size=(10,1), key='Job')], [sg.Text('存入金额:')], [sg.Text('金额 $', size=(8,1)), sg.InputText(key='Amount', size=(8,1))], [sg.Submit(), sg.Button('清空'), sg.Exit()] ] window = sg.Window('抚养费录入表单', layout) def clear_input(): # 遍历所有带key的控件进行清空 for key in ['Month', 'Job', 'Amount']: window[key].update('') while True: event, values = window.read() if event == sg.WIN_CLOSED or event == 'Exit': break if event == '清空': clear_input() if event == 'Submit': # 用pd.concat替代append,添加新行 new_row = pd.DataFrame([values]) df = pd.concat([df, new_row], ignore_index=True) df.to_excel(EXCEL_FILE, index=False) sg.popup('数据已保存!') clear_input() window.close()
额外说明:
- 确保Excel表格的列名与代码中
columns的['Month', 'Job', 'Amount']完全一致,否则会出现列不匹配问题。 - 若需要中文月份,可直接修改Combo中的选项文本,不影响数据写入逻辑。
内容的提问来源于stack exchange,提问作者Fearmedic
相关产品推荐
相关产品推荐

