Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python xlrd sheet.nrows的意外结果_Python_Excel_Xlrd - Fatal编程技术网

Python xlrd sheet.nrows的意外结果

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行中有一些值 基本上,这里的方法是使用自定义函数到达工作表的最后一

我有一份Excel表格和一个numrows调用:

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年进行测试。