Openpyxl - 如何在 Python 中仅读取 Excel 文件中的一列?

问题描述 投票:0回答:11

我只想从电子表格中提取 A 列。我有下面的代码,但它从所有列中提取。

from openpyxl import Workbook, load_workbook

wb=load_workbook("/home/ilissa/Documents/AnacondaFiles/AZ_Palmetto_MUSC_searchterms.xlsx", use_iterators=True)
sheet_ranges=wb['PrivAlert Terms']

for row in sheet_ranges.iter_rows(row_offset=1): 
    for cell in row:
        print(cell.value)
python excel openpyxl
11个回答
26
投票

如果您希望使用 openpyxl 阅读一个或多个列,这是之前答案的替代方案

import openpyxl

wb = openpyxl.load_workbook('origin.xlsx')
first_sheet = wb.get_sheet_names()[0]
worksheet = wb.get_sheet_by_name(first_sheet)

#here you iterate over the rows in the specific column
for row in range(2,worksheet.max_row+1):  
    for column in "ADEF":  #Here you can add or reduce the columns
        cell_name = "{}{}".format(column, row)
        worksheet[cell_name].value # the value of the specific cell
        ... your tasks... 

我希望这有用。


15
投票

使用openpyxl

from openpyxl import load_workbook
# The source xlsx file is named as source.xlsx
wb=load_workbook("source.xlsx")

ws = wb.active
first_column = ws['A']

# Print the contents
for x in xrange(len(first_column)): 
    print(first_column[x].value) 

13
投票

我认为更简单

from openpyxl import Workbook, load_workbook
wb = load_workbook("your excel file")
source = wb["name of the sheet"]
for cell in source['A']:
    print(cell.value)

2
投票

我建议使用 pandas 库。

import pandas as pd
dataFrame = pd.read_excel("/home/ilissa/Documents/AnacondaFiles/AZ_Palmetto_MUSC_searchterms.xlsx", sheetname = "PrivAlert Terms", parse_cols = 0)

如果您对 pandas 感到不舒服,或者出于任何原因需要使用 openpyxl,则代码中的错误是您没有仅选择第一列。您明确调用每行中的每个单元格。如果您只想要第一列,那么只获取每行中的第一列。

for row in sheet_ranges.iter_rows(row_offset=1): 
    print(row[0].value)

2
投票

使用

ws.get_squared_range()
精确控制返回的单元格范围,例如单个列。


2
投票

这是一个简单的函数:

import openpyxl

def return_column_from_excel(file_name, sheet_name, column_num, first_data_row=1):
    wb = openpyxl.load_workbook(filename=file_name)
    ws = wb.get_sheet_by_name(sheet_name)
    min_col, min_row, max_col, max_row = (column_num, first_data_row, column_num, ws.max_row)
    return ws.get_squared_range(min_col, min_row, max_col, max_row)

1
投票

通过使用 openpyxl 库和 Python 的列表推导概念:

import openpyxl

book = openpyxl.load_workbook('testfile.xlsx')
user_data = book.get_sheet_by_name(str(sheet_name))
print([str(user_data[x][0].value) for x in range(1,user_data.max_row)])

这是非常神奇的方法,值得一试


0
投票

利用 ZLNK 的出色响应,我创建了这个函数,它使用列表理解在一行中实现相同的结果:

def read_column(ws, begin, columns):
  return [ws["{}{}".format(column, row)].value for row in range(begin, len(ws.rows) + 1) for column in columns]

然后,您可以通过传递工作表、要开始的行以及要返回的任何列的第一个字母来调用它:

column_a_values = read_column(worksheet, 2, 'A')

要返回 A 列和 B 列,调用更改为:

column_ab_values = read_column(worksheet, 2, 'AB')

0
投票

我知道我可能会迟到来回答这个话题。但至少我的答案可能会让其他可能想要解决问题的人受益。

您必须迭代工作表的列值。根据我的意见,可以这样实现:

from openpyxl import load_workbook

wb = load_workbook("/home/ilissa/Documents/AnacondaFiles/AZ_Palmetto_MUSC_searchterms.xlsx", read_only=True)
sheet = wb['PrivAlert Terms']
for val in sheet.iter_rows(max_col=1):
        print(val[0].value)

iter_rows
循环指定列的行。您可以指定从 min_row 到
iter_rows
以及
max_row
的参数。此处设置
max_col
使其循环遍历列的所有行(列直至指定的最大值)。这只会提取电子表格第一列的所有值
类似地,如果你想遍历一行的所有列,即水平方向,那么你可以使用 

max_col=1

指定 from row 和til 列属性

    


0
投票

iter_cols



0
投票
© www.soinside.com 2019 - 2024. All rights reserved.