2016-01-12 219 views
11

我想从我的电子表格中只拉A列。我有下面的代码,但它从所有列中拉出。openpyxl - 从python的excel文件中只读取一列?

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) 

回答

0

我建议使用熊猫库。

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

如果你觉得不舒服的大熊猫,或出于某种原因需要openpyxl工作,在你的代码中的错误是,你是不是只选择第一列。您显式调用每一行中的每个单元格。如果你只想要第一列,那么只能得到每一行的第一列。

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

这仍然会在同一时间返回一行。 –

1

使用ws.get_squared_range()精确地控制细胞,如单柱的范围内,则返回。

1

下面是一个简单的函数:

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) 
7

这是你哗哗使用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... 

我希望这是有用的阅读一列或多列的情况下,对以前的答案的选择。

+0

您的意思是:'对于范围内的行(2,worksheet.max_row + 1):'而不是'范围内的行(2,worksheet.max_row):'? –

+0

嗨,没有。由于worksheet.max_row返回其上有元素的最高索引,如果您添加+1,则最后一行将为空行。可以在这里查看更多示例:[openpyxl](http://openpyxl.readthedocs.io/en/default/_modules/openpyxl/worksheet/worksheet.html) – ZLNK

+0

是的,但对于函数'range',第二个参数是排他性的。这样我们会错过最后一行的数据 –

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') 
1

使用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) 
0

通过使用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)]) 

这是相当惊人的方法,值得一试