列表索引超出while循环的范围

时间:2016-03-18 10:38:15

标签: python python-2.7

for file in files:
    book=xlrd.open_workbook(file)
    first_sheet = book.sheet_by_index(0)
    i=0
    j=0
    while first_sheet.cell(14+i,1+j).value != xlrd.empty_cell.value:
        while first_sheet.cell(14+i,1+j).value != xlrd.empty_cell.value:
            val=first_sheet.cell(14+i,1+j)
            print (val, i)
            i=i+1
        i=0
        j=j+1

读取列的n行后,它表示列表索引超出范围。假设,我没有行数,所以选择while循环。我可以在excel vba中运行,但这里有一些问题 错误追溯

Traceback (most recent call last):
  File "C:\Users\User_2\Desktop\Vijay\FAST\KarBarge\Results py-spreadsheets.py", line 28, in <module>
    while first_sheet.cell(14+i,1+j).value != xlrd.empty_cell.value:
  File "C:\Python27\lib\site-packages\xlrd\sheet.py", line 399, in cell
    self._cell_types[rowx][colx],
IndexError: list index out of range

2 个答案:

答案 0 :(得分:0)

如果您知道您遇到的异常,并且只是想忽略它,那么try: except:就是您的选择。

i=0
j=0
try:
  while first_sheet.cell(14,1+j).value != xlrd.empty_cell.value:
    try:
      while first_sheet.cell(14+i,1+j).value != xlrd.empty_cell.value:
          val=first_sheet.cell(14+i,1+j)
          print (val, i)
          i=i+1
    except IndexError:
      # ignore error from iterating in i
      pass
except IndexError:
  # ignore error from iterating in j
  pass
else:
  i=0
  j=j+1

答案 1 :(得分:0)

您获得List index out of range的原因正如您所说,您正在尝试访问电子表格中不存在的单元格。只需测试它是否为空就会导致这种情况。

xlrd可以使用以下方式告诉您可用行数和列数:

print(first_sheet.nrows, first_sheet.ncols)

所以你的循环需要保持在这些范围内。

您的代码似乎试图按列显示电子表格的内容。作为替代方法,您可以尝试以下方法:

import xlrd

workbook = xlrd.open_workbook(r"input.xlsx")
sheet = workbook.sheet_by_index(0)

for colx in range(1, sheet.ncols):
    print(sheet.col_values(colx, start_rowx=14))  

这会将每列打印为从行14开始的值列表。