Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
尝试在Python中使用PySimpleGUI通过openpyxl读取excel单元格_Python_Openpyxl_Pysimplegui - Fatal编程技术网

尝试在Python中使用PySimpleGUI通过openpyxl读取excel单元格

尝试在Python中使用PySimpleGUI通过openpyxl读取excel单元格,python,openpyxl,pysimplegui,Python,Openpyxl,Pysimplegui,我试图让PySimpleGUI读取特定的excel单元格。虽然代码本身可以工作,但一旦与PySimpleGUI一起使用,它就不会返回正确的单元格值。它只返回标题,而不返回其他行。任何关于如何修复它的想法都将不胜感激 ''' ''' (这应该是一个评论) 删除所有与PySimpleGUI相关的内容,它只是掩盖了问题。 关注for循环,使其工作。当前,它只处理标题行,因为行[2]中有if。value==“ID”:行 (已编辑)请单独尝试以下操作: roster = openpyxl.load

我试图让PySimpleGUI读取特定的excel单元格。虽然代码本身可以工作,但一旦与PySimpleGUI一起使用,它就不会返回正确的单元格值。它只返回标题,而不返回其他行。任何关于如何修复它的想法都将不胜感激

'''

'''

(这应该是一个评论) 删除所有与PySimpleGUI相关的内容,它只是掩盖了问题。 关注
for
循环,使其工作。当前,它只处理标题行,因为行[2]中有
if。value==“ID”:

(已编辑)请单独尝试以下操作:

    roster = openpyxl.load_workbook('sample.xlsx')
    sheet = roster.active
    for row in sheet.rows:
        print('{} {}'.format(row[0].value, row[1].value))

好吧,我知道了。代码本身很好。它不读取它应该读取的单元格的原因是PySimpleGUI需要知道那些Excel单元格是整数。所以我做的唯一一件事就是添加int(值['ID'])

我在代码中做了另一个mod。由于我已经使用openpyxl.load_工作簿将excel文件导入到代码中,因此不需要在窗口中浏览它。我去掉了那部分。以下是完整的功能代码:

import PySimpleGUI as sg
import openpyxl

roster = openpyxl.load_workbook('/home/superuser/Desktop/sample.xlsx')
sheet = roster.active  

sg.theme('DefaultNoMoreNagging')
#sg.theme('TanBlue')
#sg.theme('Material2')
layout =  [[sg.Text(pad=(150,30), font=("Arial", 20, 'bold'), size=(15,1))],
          [sg.Text("Student ID:", font=("Arial", 15, 'bold'), pad=(20,0), size=(12,1)), sg.InputText(key='ID', font="Arial 20", background_color="#F7F9F9", size=(10,1)),sg.Button("Enter",font="Arial 10", pad=(10,0))],
          [sg.Text("Student Name:", font=("Arial", 15, 'bold'), pad=(20,30), size=(12,1)), sg.Multiline(key='name', font="Arial 20", pad=(0,5), background_color="#F7F9F9", size=(17,1), do_not_clear=False)]]

window = sg.Window("Working Code", layout)

while True:
    event,values = window.read()
    if event == "Cancel" or event == sg.WIN_CLOSED:
        break
    elif event == "Enter":        
        for row in sheet.rows:
            if  int(values['ID']) == row[2].value:
                print("Student Name:{} {}".format(row[0].value,row[1].value))        
                window['name'].update(f"{row[0].value} {row[1].value}")
                break
        else:
            sg.popup_error("Record not found", font="Arial 10")

window.close()

但问题是,如果我删除PySimpleGUI中的所有内容,它将无缝工作。它根据ID返回我请求的确切单元格。这是我不理解的。它作为一个独立的openpyxl和python代码工作,但在添加PySimpleGUI时会变得很奇怪。我尝试了所有的方法,但无法找出我缺少的地方。@RobinSage再次测试,发布的代码不会执行您所说的功能。“for”循环只执行一次,并在打印标头后中断(因为“break”语句)。即使你删除了那个“break”,它对剩下的行也没有任何作用。我已经尝试了所有的方法,这就是为什么我在这里求助于询问。。。如果您能告诉我,我将不胜感激。请单独尝试:```花名册=openpyxl.load_工作簿('sample.xlsx')sheet=花名册.active for sheet中的行。rows:print('{}{}}.format(row[0].value,row[1].value)`` print()函数没有问题。我的代码正确打印单元格值。现在,如果我尝试使用-->窗口['name'].print(行[2].value)“它只返回标题,而不返回其他行”,因为在循环中要做的第一件事是检查行[2].value=='ID',这将用于标题(即第一行),然后中断。正如所建议的,这与PySimpleGUI无关。在第一行中断循环,因此将永远看不到任何其他行。
import PySimpleGUI as sg
import openpyxl

roster = openpyxl.load_workbook('/home/superuser/Desktop/sample.xlsx')
sheet = roster.active  

sg.theme('DefaultNoMoreNagging')
#sg.theme('TanBlue')
#sg.theme('Material2')
layout =  [[sg.Text(pad=(150,30), font=("Arial", 20, 'bold'), size=(15,1))],
          [sg.Text("Student ID:", font=("Arial", 15, 'bold'), pad=(20,0), size=(12,1)), sg.InputText(key='ID', font="Arial 20", background_color="#F7F9F9", size=(10,1)),sg.Button("Enter",font="Arial 10", pad=(10,0))],
          [sg.Text("Student Name:", font=("Arial", 15, 'bold'), pad=(20,30), size=(12,1)), sg.Multiline(key='name', font="Arial 20", pad=(0,5), background_color="#F7F9F9", size=(17,1), do_not_clear=False)]]

window = sg.Window("Working Code", layout)

while True:
    event,values = window.read()
    if event == "Cancel" or event == sg.WIN_CLOSED:
        break
    elif event == "Enter":        
        for row in sheet.rows:
            if  int(values['ID']) == row[2].value:
                print("Student Name:{} {}".format(row[0].value,row[1].value))        
                window['name'].update(f"{row[0].value} {row[1].value}")
                break
        else:
            sg.popup_error("Record not found", font="Arial 10")

window.close()