您遇到的錯誤暗示rowx
或colx
參數是出界for this sheet的。
In the cell access functions, "rowx" is a row index, counting from zero, and "colx" is a column index, counting from zero. Negative values for row/column indexes and slice positions are supported in the expected fashion.
我只是發現了這一點(之前從未使用過XLRD),但如果您查詢r_sheet.nrows
我敢打賭,你會發現值小於row+j
。看來xlrd只有讀取工作表的一部分,實際上是Excel的UsedRange
。
所以你可以使用一些異常處理,或者是try/catch
塊或者你可以這樣做。請注意,只要row+j
大於該表格的nrows
屬性,就應該在布爾表達式的第一部分短路。
if (row+j <= r_sheet.nrows-1) and (r_sheet.cell_value(row+j,0) = ''):
break
或者,甚至與你原來的方法:
if (row+j <= r_sheet.nrows-1) and (r_sheet.cell_type(row+j,0)== xlrd.XL_CELL_EMPTY):
break
沒有它不工作。得到低於錯誤。 C:\ Python26 \ LIB \站點包>蟒蛇xlsread_1.py 回溯(最近通話最後一個): 文件 「xlsread_1.py」,線路243,在 如果r_sheet.cell(行+ J,0 )是xlrd.empty_cell: 文件「C:\ Python26 \ Lib \ site-packages \ xlrd \ sheet.py」,第395行,單元格 xfx = self.cell_xf_index(rowx,colx) 文件「C:\ Python26 \ lib \ site-packages \ xlrd \ sheet.py「,行421,位於cell_xf_index中 xfx = self._cell_xf_indexes [rowx] [colx] IndexError:列表索引超出範圍。 –
2015-03-31 17:07:27
這表示行或列索引超出範圍。我沒有改變你的代碼部分... – 2015-03-31 17:09:54
另外,請注意*兩個*可能的解決方案。你有嘗試過嗎? *兩者*在相同的錯誤失敗? – 2015-03-31 17:10:24