如何在输入特定行的值时提取特定行的值

时间:2019-01-09 15:24:32

标签: python excel tkinter openpyxl

我想制作一个输入列值的GUI程序 程序必须转到输入值等于该行值的行 并在文本框中显示特定的行值 但是我对如何做到这一点一无所知。

我尝试使用while循环来执行此操作,因此它将搜索整个excel文件,以检查输入数据的值是否等于文本框中的数据,但操作不正确。

我正在使用蟒蛇使用python 3.7.0。

from tkinter import *
import openpyxl

a = Tk()
a.title('Return Book')
a.geometry('500x200')
heading = Label(a,text = 'Return Book')
heading.grid(row = 0,column = 1)
lab1 = Label(a,text = 'Enter Invoice Number:')
lab1.grid(row = 1, column = 0)
inv_field = Entry(a)
inv_field.grid(row = 1, column = 1)
inv_field.get()
find = Button(a,text = 'Find',width = 4,command =a.destroy)
find.grid(row = 2, column = 1)


def find():
    ##extradiction
    ##location of excel file
    path = "E:\Library Management\issue.xlsx"
    # workbook object is created 
    wb = openpyxl.load_workbook(path)   
    sheet = wb.active 
    max_col = sheet.max_column 

    # Will print a particular row value 
    for i in range(1, max_col + 1): 
    cell_obj = sheet.cell(row = 2, column = i) 
    print(cell_obj.value, end = " ")



a.mainloop()

我希望程序输入发票编号的值,并在整个数据库中搜索该编号,然后在文本框中打印该行。

1 个答案:

答案 0 :(得分:0)

首先,您没有在代码中定义textbox来显示搜索结果。其次,您在a.destroy按钮的command选项中使用find,应将其设置为find功能。另外,您使用相同的名称find来查找按钮和查找功能。

建议添加一个Text小部件:

book_info = Text(a, width=40, height=5)
book_info.grid(...)

然后将find()函数重命名为find_book()并添加一个新的update_text()以显示搜索结果,如下所示:

def update_text(info):
    book_info.delete(1.0, 'end')
    book_info.insert('end', info)

def find_book():
    inv_no = inv_field.get()
    if inv_no:
        wb = openpyxl.load_workbook('E:\Library Management\issues.xlsx')
        sheet = wb.active
        for row in sheet.rows:
            # assume invoice no is in column 1
            if row[0].value == inv_no:
                update_text('\n'.join(str(cell.value) if cell.value else '' for cell in row))
                return
        wb.close()
        update_text('Book not found')

最后更改command按钮的find选项以调用find_book()函数:

find = Button(a, text='Find', command=find_book)