如何使用openpyxl迭代excel工作簿中的每一行(如何解决无限循环问题)?

问题描述 投票:-1回答:1

我有一个excel文件,其中包含一些个人信息。我试图获取excel文件中每一行的这些信息,并进行各种排序和重新分配。我的第一步是尝试从工作簿中提取信息并将其存储在列表字典中。我的程序以无限循环结束。我的错是什么?

这是我试过的代码:

import openpyxl

file = openpyxl.load_workbook("peopleList.xlsx")
sheet = file.active

person = {}
people = []

reader = 1

while sheet["A" + str(reader)].value != "":
    person["name"] = sheet["A" + str(reader)].value
    person["gender"] = sheet["B" + str(reader)].value
    person["school"] = sheet["C" + str(reader)].value
    person["ch1"] = sheet["D" + str(reader)].value
    person["ch2"] = sheet["E" + str(reader)].value
    person["ch3"] = sheet["F" + str(reader)].value
    people.append(person)
    person = {}

print(people)

python-3.x openpyxl
1个回答
0
投票

你的情况有误。在while语句中,您只检查“A1”中是否有值。因为总有一个值,所以循环无限。这有效

import openpyxl

file = openpyxl.load_workbook('peopleList.xlsx')
sheet = file.active

person = {}
people = []


for reader in np.arange(1,len(sheet['A'])+1):
    person["name"] = sheet["A" + str(reader)].value
    person["gender"] = sheet["B" + str(reader)].value
    person["school"] = sheet["C" + str(reader)].value
    person["ch1"] = sheet["D" + str(reader)].value
    person["ch2"] = sheet["E" + str(reader)].value
    person["ch3"] = sheet["F" + str(reader)].value
    people.append(person)
    person = {}

print(people)

这是重要的一句话:

for reader in np.arange(1,len(sheet['A'])+1):

它也可以使用while语句来完成,但是你在for循环中获得无限循环的可能性要小得多,所以在很多情况下我发现它们更明确。我在这里做的是计算列A的长度(假设它与其他列相同,然后通过使用[1,2,3,...,len(A)]创建该列表来交换数字列表np.arange(len(A))

© www.soinside.com 2019 - 2024. All rights reserved.