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) 

如果您使用openpyxl读取一列或多列,这是以前答案的替代scheme

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

我希望这是有用的。

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

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

这是一个简单的function:

 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) 

我会build议使用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,那么代码中的错误就是你并不是只select第一列。 您显式调用每一行中的每个单元格。 如果你只想要第一列,那么只能得到每一行的第一列。

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

使用ZLNK的优秀响应,我创build了这个使用列表理解的函数,在单行中实现相同的结果:

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

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

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