Openpyxl:读取一系列列中的电子表格数据

时间:2017-11-17 20:46:20

标签: python python-3.x openpyxl

您好我正在尝试从包含第2行到第5行的范围内的电子表格中读取数据,并且它遵循列顺序,但我一直收到错误,说列范围有问题可以帮助我吗? 代码看起来应该是这样的,而不是行,它应该是列:

for row in range(2, sheet.max_row + 1):
   state  = sheet['B' + str(row)].value
   county = sheet['C' + str(row)].value
   pop    = sheet['D' + str(row)].value

我尝试过的代码是:

import openpyxl
wb = openpyxl.load_workbook('name of wb')
sheet = wb.get_sheet_by_name('Sheet1')
for col in range('G', sheet.max_column + 1):
   state  = sheet[1 + str(column)].value
   county = sheet[2 + str(column)].value
   pop    = sheet[3 + str(column)].value
   hospitals  = sheet[4 + str(column)].value
   universities = sheet[5 + str(column)].value

2 个答案:

答案 0 :(得分:0)

我的猜测是你的代码“sheet.max_row + 1”是罪魁祸首。这将超出工作表列表的可索引范围。

答案 1 :(得分:0)

就我所见,问题在于“范围('G',sheet.max_column + 1)”。范围的参数通常应该是整数。 查看openpyxl utils模块中的几个方法:

column_index_from_string(str_col), get_column_letter(IDX)

对于您的示例,column_index_from_string('G')给出7.您还应该将单元格引用转换为excel样式,例如A1不是1A。

import openpyxl
wb = openpyxl.load_workbook('name of wb')
sheet = wb.get_sheet_by_name('Sheet1')
for col in range(openpyxl.utils.column_index_from_string('G'), sheet.max_column + 1):
   state  = sheet[openpyxl.utils.get_column_letter(col) + '1'].value
   county = sheet[openpyxl.utils.get_column_letter(col) + '2'].value
   pop    = sheet[openpyxl.utils.get_column_letter(col) + '3'].value
   hospitals  = sheet[openpyxl.utils.get_column_letter(col) + '4'].value
   universities = sheet[openpyxl.utils.get_column_letter(col) + '5'].value