如何实现Python程序数据写入Excel?求助解决连接失败问题
问题分析与解决方案
你的代码存在几个关键问题,导致无法将数据写入Excel,以下是问题点和修正方案:
核心问题
- 冗余的Excel文件打开:同时用
openpyxl.load_workbook和pandas.read_excel操作同一文件,会引发文件访问冲突,且openpyxl代码未实际发挥作用,需删除。 - Pandas数据合并错误:
df.concat是错误用法,正确的方式是将用户输入的字典转换为单行DataFrame,再与原DataFrame合并。 - 日期控件未绑定Key:CalendarButton对应的InputText没有设置key,导致日期值无法被捕获到
values字典中。 - 输入清空方法错误: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
相关产品推荐
相关产品推荐

