Python xlrd sheet.nrows的意外结果
我有一份Excel表格和一个numrows调用:Python xlrd sheet.nrows的意外结果,python,excel,xlrd,Python,Excel,Xlrd,我有一份Excel表格和一个numrows调用: sheet = self.rbook.sheet_by_index(0) numrows = (sheet.nrows) 返回值6而不是5。第六行第0、1或2列右侧的任何单元格中都没有任何内容 我制作了一些模拟Excel文件,其中一个文件中没有任何内容,它正确地返回了0。这应该可以让您开始了。正如注释中所暗示的,由单个空格组成的字符串是一个值,这就是XLRD返回6的原因,因为第6行中有一些值 基本上,这里的方法是使用自定义函数到达工作表的最后一
sheet = self.rbook.sheet_by_index(0)
numrows = (sheet.nrows)
返回值6而不是5。第六行第0、1或2列右侧的任何单元格中都没有任何内容
我制作了一些模拟Excel文件,其中一个文件中没有任何内容,它正确地返回了0。这应该可以让您开始了。正如注释中所暗示的,由单个空格组成的字符串是一个值,这就是XLRD返回6的原因,因为第6行中有一些值 基本上,这里的方法是使用自定义函数到达工作表的最后一行。此函数迭代指定col_num的col_值。因此,在函数中可以执行以下操作:
numrows = getLastRow(sheet, 0)
通过将col_num设置为可传递给此函数的参数,可以灵活地查询不同的列,而无需使用不同的函数或完全不同的逻辑分支,并且可以省略可选的col_num参数以返回本机nrows属性
def getLastRow(sh, col_num = None):
"""
;param sh: Excel worksheet
;param col_num: long/integer identifying which column to query
"""
if not col_num == None:
return sh.nrows
for r in range(sh.nrows,1,-1):
if str(sh.col_values(col_num)[r-1]).strip() == '':
print 'cell({},{}) contains an empty value or trims to empty string'.format(r, col_num)
else:
return r
在这种情况下,我使用以下简单结构:
number_of_rows = 0
try:
while current_sheet.cell(number_of_rows,0).value != '':
number_of_rows += 1
except:
number_of_rows -= 1
您可以计算行数和列数。只需将'0,行数'0'替换为'0,行数'
简单,不好,但有效:-您还在使用Excel 2003吗?在Excel中,将光标放在单元格A1中,然后按Ctrl+Shift+Del。突出显示的范围是什么?有时,Excel对工作表的使用范围的解释与您可能会看到的不同,这可能是由多种因素造成的。可能在第6行的某个地方,有一个明显但实际上并非空的单元格。例如,包含“”的单元格会导致这种情况。@DavidZemens我没有使用Excel 2003,但我使用的是Xlrd,它只支持.xls文件Excel 2003。@DavidZemens检查后,第6行中似乎确实有“”,这显然不是空单元格。也就是说,出于这些原因,我不太喜欢excel。我的问题是,我的代码应该根据一个空格来确定从哪个单元格开始。因此,如果第一列中没有空格,那么它将移动到第二列,当它找到一个空格时,它将从那里开始…但是如果它将文件解释为有6行,而第6行有空格,那么事情就不起作用了。。。AFAIK您可以在2007年和2010年使用它,但我还没有在2013年进行测试。