openpyxl iter_rows()跳过最后一行吗?

时间:2015-02-24 09:20:59

标签: python openpyxl import-from-excel

我在使用openpyx iter_rows时遇到了困难。

源excel在第一列(A)中有行:

  • 第一个数据行
  • ...
  • 第32行数据行

代码:

start, stop = 0, 1000    
for row_index, row in enumerate(source_ws.iter_rows()):
    if start < row_index < stop:                
       # something meaning here

不会访问最后的第32个数据行,但会在第31行突破。 行之间没有空行。

我做了一个邪恶的黑客来规避这种行为,但这不是一个持久的选择。

环境:

  • Python 3.4.0(v3.4.0:04f714765c13,2014年3月16日,19:25:23)
  • jdcal == 1.0
  • openpyxl == 2.1.5

我在这里做错了什么?

2 个答案:

答案 0 :(得分:1)

ws.iter_rows()将循环遍历所有行,除非您另有说明。如果您想限制它,那么您可以使用ws.get_squared_range(1, 1, 32, ws.max_column)(前32行)。

答案 1 :(得分:0)

对行索引停止条件使用“小于或等于”运算符:

start, stop = 0, 1000    
for row_index, row in enumerate(source_ws.iter_rows()):
    if start < row_index <= stop:                
       # something meaning here

或者您可以使用列表理解和“行”编号属性来删除枚举。请注意 iter_rows() 是从 1 开始计算行数,而不是 0。

    start, stop = 1, 1000    
    for row in [row for row in source_ws.iter_rows() if start < row[0].row <= stop]:
        #do something