python 数据结构

是数据结构遇到的问题。第一个同学写了一个从excel数据中调取信息出来的代码,我负责写个ui放进去。调取信息的代码独立运行的时候是正常的,但是放进ui之后报错了。
同学写的调取信息源代码是
def output(id_number):
    result = exist(id_number)
    if result[1] is True:
        for y in range(1, 12):
            cell_search = write_sheet.cell(row=recur_row,column=y)
            cell_base = write_sheet.cell(row=1, column=y)
            if cell_base.value == '姓名':
                print(f"姓名:{cell_search.value}")
            elif cell_base.value == '身份证号码':
                print(f'身份证号码:{cell_search.value}')
            elif cell_base.value == '体温':
                print(f"体温:{cell_search.value}")
            elif cell_base.value == '咳嗽':
                cough(cell_search.value)
                print(f"干咳:{condition_cough}")
            elif cell_base.value == '乏力':
                vim(cell_search.value)
                print(f'乏力:{condition_vim}')
            elif cell_base.value == '鼻塞':
                rhinobyon(cell_search.value)
                print(f'鼻塞:{condition_rhinobyon}')
            elif cell_base.value == '流鼻涕':
                snot(cell_search.value)
                print(f'流鼻涕:{condition_snot}')
            elif cell_base.value == '咽喉疼痛':
                throat(cell_search.value)
                print(f'咽喉:{condition_throat}')
            elif cell_base.value == '嗅觉失灵':
                smell(cell_search.value)
                print(f'嗅觉:{condition_smell}')
            elif cell_base.value == '味觉失灵':
                taste(cell_search.value)
                print(f'味觉:{condition_taste}')
            else:
                muscle(cell_search.value)
                print(f'肌肉:{condition_muscle}')

运行结果及详细报错内容
runfile('C:/Users/32673/Desktop/疫情防控系统/防疫互助系统.py', wdir='C:/Users/32673/Desktop/疫情防控系统')
Exception in Tkinter callback
Traceback (most recent call last):
  File "D:\ProgramData\Anaconda3\lib\tkinter\__init__.py", line 1702, in __call__
    return self.func(*args)
  File "C:/Users/32673/Desktop/疫情防控系统/防疫互助系统.py", line 291, in numberlist
    output(id0)
  File "C:/Users/32673/Desktop/疫情防控系统/防疫互助系统.py", line 255, in output
    cell_search = write_sheet.cell(recur_row,y)
  File "D:\ProgramData\Anaconda3\lib\site-packages\openpyxl\worksheet\worksheet.py", line 296, in cell
    raise ValueError("Row or column values must be at least 1")
ValueError: Row or column values must be at least 1

######我的解答思路为:
我考虑是否因为tkinter库里面有grid函数,其中的row和column冲突了才会报错这个。于是我把ui里面的所有的grid函数全部换成了pack函数,但是同样报错。
另外已经找到,出bug就是

cell_search = write_sheet.cell(row=recur_row,column=y)

这一行代码。
非常疑惑的就是为什么没有放进ui里面去的时候它正常运行,但是引用了tkinter之后就报错了。
我使用的库有:


from tkinter import*
from tkinter import messagebox
from tkinter.ttk import*
import os
from openpyxl import load_workbook
希望能解决这个bug,正常运行ui。

这个问题可能是由于在定义输出函数中的row参数时没有给定具体的数值导致的。可以在调用函数时将一个有效的行数值传入output()函数,然后在函数内部使用这个值来指定要搜索的行。

例如可以这样调用输出函数:

output(id_number, row=2)

然后在函数内部将row参数的值传给cell_search定义中的row参数:

cell_search = write_sheet.cell(row=row,column=y)

这样函数就可以正常工作了。
仅供参考,望采纳,谢谢。

这个错误信息提示你在调用 write_sheet.cell(recur_row, y) 方法时,recur_row 和 y 的值都小于 1。在 Excel 中,行和列的编号都是从 1 开始的,因此如果你的代码中使用了小于 1 的行列编号,就会出现这个错误。

为了解决这个问题,你需要找出哪个变量的值小于 1,并修改代码使其变量值大于等于 1。例如,如果 recur_row 的值小于 1,你可以在调用 write_sheet.cell(recur_row, y) 之前加上一句 recur_row = max(1, recur_row),这样就能保证 recur_row 的值至少是 1。

此外,你还应该注意其他变量的值,确保它们也都大于等于 1。在修改代码之前,你可以使用 print 语句打印出相关变量的值,以帮助你分析问题。

ValueError: Row or column values must be at least 1
报错含义:
ValueError:行或列值必须至少为1
从报错看,行数和列数从1开始算,不好定位,行和列都+1开始计算
示例:
for r in range(data.shape[0]):
    for c in range(data.shape[1]):
        ws.cell(row=r, column=c).value =data[r,c]

wb.save(path + 'oxl_book.xlsx')
修改:
for r in range(data.shape[0]):
    for c in range(data.shape[1]):
        ws.cell(row=r+1, column=c+1).value =data[r,c]

wb.save(path + 'oxl_book.xlsx')

看日志,提示很明显了


ValueError: Row or column values must be at least 

如果还有疑问,欢迎来交流。