按名称选择一列 - openpyxl

Abh*_*ash 2 python openpyxl

这是我目前的代码。如您所见,我通过指定列索引从每一行的每个单元格中获取一个值。

for row_cells in sheet.iter_rows(min_row=1, max_row=10):
   object = {"key1": str(row_cells[1].value), "Key2": str(row_cells[3].value),
                           "Key3": str(row_cells[4].value), "Key4": str(row_cells[2].value),
                           "Key5": str(row_cells[5].value)}
Run Code Online (Sandbox Code Playgroud)

现在,在给定的 Excel 表中,第一行始终包含每列的标题。有没有办法,而不是指定索引,我指定列的名称,然后在单元格中获取一个值。该.upper()方法确实为我们提供了一列最上面单元格的值。

G5W*_*G5W 14

您可以首先构建一个字典,其中键是列名,值是列号。然后,使用字典将名称转换为数字。

import openpyxl

workbook = openpyxl.load_workbook('Data/Test01.xlsx')
worksheet = workbook['Sheet1']

## Create a dictionary of column names
ColNames = {}
Current  = 0
for COL in worksheet.iter_cols(1, worksheet.max_column):
    ColNames[COL[0].value] = Current
    Current += 1

## Now you can access by column name
## (My data has a column named 'Dogs')
for row_cells in worksheet.iter_rows(min_row=1, max_row=4):
    print(row_cells[ColNames['Dogs']].value)
Run Code Online (Sandbox Code Playgroud)


小智 8

您可以通过迭代列来完成此操作。检查您需要的列。并获取值。

import openpyxl
book = openpyxl.load_workbook(path)
sheet = book['Data']
column_name = 'Username'
for column_cell in sheet.iter_cols(1, sheet.max_column):  # iterate column cell
    if column_cell[0].value == column_name:    # check for your column
        j = 0
        for data in column_cell[1:]:    # iterate your column
            print(data.value)
        break
Run Code Online (Sandbox Code Playgroud)