如何使用 openpyxl 循环遍历 Excel 电子表格中的每一行

BTK*_*BTK 0 python openpyxl

我想将 Excel 电子表格中每一行的第一列作为键,并将该行中的其余值作为其值,以便我可以将它们存储在字典中。问题是,当我循环遍历行和列时,所有行值都存储在每个键中。

import openpyxl

from openpyxl import load_workbook

file = "test.xlsx"

#load the work book
wb_obj = load_workbook(filename = file)

wsheet = wb_obj['test']

#dictionary to store data
dataDict = {}

value = []

row_count = wsheet.max_row
col_count = wsheet.max_column

# loop to get row and column values
for i in range(2, row_count+1):
    for j in range(i, col_count+1):
        key   = wsheet.cell(row=i, column=1).value
        print (key)
        value.append(wsheet.cell(row=i, column=j).value)
        print (value)

    dataDict[key] = value

#prompt user for input
userInput = input("Please enter an id to find a person's details: ")

print (dataDict.get(int(userInput)))
Run Code Online (Sandbox Code Playgroud)

电子表格中的数据: 在此输入图像描述

我期待的结果:{1:['John','Doe',4567891234,'johndoe@jd.ca'],2:['Wayne 'Kane',1234567891,'wd@wd.ca']}

我得到的结果:{1:['John','Doe',4567891234,'johndoe@jd.ca','Kane',1234567891,'wd@wd.ca'],2:['John','Doe' ', 4567891234, 'johndoe@jd.ca', '凯恩', 1234567891, 'wd@wd.ca']}

jfa*_*oni 7

Openpyxl 已经有一个正确的方法来使用worksheet.iter_rows(). 您可以使用它将第一个单元格的值解包为键,并将其他单元格的值解包为字典中的列表,对每一行重复。

from openpyxl import load_workbook

file = "test.xlsx" #load the work book
wb_obj = load_workbook(filename = file)
wsheet = wb_obj['test']
dataDict = {}

for key, *values in wsheet.iter_rows():
    dataDict[key.value] = [v.value for v in values]
Run Code Online (Sandbox Code Playgroud)

  • 使用关键字参数“min_row”指定从哪一行开始迭代:“wsheet.iter_rows(min_row=2)”。 (3认同)