Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/430.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.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
Javascript getLastRow()的问题_Javascript_Google Apps Script_Google Sheets - Fatal编程技术网

Javascript getLastRow()的问题

Javascript getLastRow()的问题,javascript,google-apps-script,google-sheets,Javascript,Google Apps Script,Google Sheets,我对getLastRow()有问题。我认为这个函数应该返回最后一行数据。但是,由于我正在处理的工作表在充满数据的行下面有更多的空行,因此函数似乎进入并在执行时选择最后一个空行,而不是选择最后一个包含数据的行,这可能不同。有人能告诉我如何修复这个异常吗。这是一个谷歌脚本错误还是我不清楚该怎么做?如果我没有说清楚,请进一步提问 表格中有“整列”公式吗?是数组公式,还是一直向下复制的公式?即使这些公式被设计为返回底部的空白单元格,getLastRow()仍将捕获它们 如果是这种情况,请尝试: func

我对getLastRow()有问题。我认为这个函数应该返回最后一行数据。但是,由于我正在处理的工作表在充满数据的行下面有更多的空行,因此函数似乎进入并在执行时选择最后一个空行,而不是选择最后一个包含数据的行,这可能不同。有人能告诉我如何修复这个异常吗。这是一个谷歌脚本错误还是我不清楚该怎么做?如果我没有说清楚,请进一步提问

表格中有“整列”公式吗?是数组公式,还是一直向下复制的公式?即使这些公式被设计为返回底部的空白单元格,
getLastRow()
仍将捕获它们

如果是这种情况,请尝试:

function getLastPopulatedRow(sheet) {
  var data = sheet.getDataRange().getValues();
  for (var i = data.length-1; i > 0; i--) {
    for (var j = 0; j < data[0].length; j++) {
      if (data[i][j]) return i+1;
    }
  }
  return 0; // or 1 depending on your needs
}
函数getLastPopulatedRow(工作表){ var data=sheet.getDataRange().getValues(); 对于(var i=data.length-1;i>0;i--){ 对于(var j=0;j更简单的方法是

var lastRow = sheet.getDataRange().getValues().length ;

虽然Adams的解决方案将进行一些调整,但我通过一些搜索找到了这个问题的另一个解决方案。我看到了一个应该查找第一个空行的代码,我想我可以简单地返回第一个空行后面的行以获得最后填充的行。我在此附上代码:

function getLastPopulatedRow(sheet) {
  var cell = sheet.getRange('a1');
  var ct = 0;
  while ( cell.offset(ct, 0).getValue() != "" ) {
    ct++;
  }
  return (ct--);
}

这是当前所选答案的另一个版本。这将交换数组联接的内部循环,在项之间没有空格。这将连接行上的所有字符。如果在任何位置有一个字符,它将踢出类似于当前答案

我做了一些速度测试,虽然我认为选择的答案可能会更快,但出于某种原因,基于我的测试,这个过程似乎更快。我相信我几年前在这里的堆栈溢出上发现了这个概念,但现在看不到这个参考

function getLastPopulatedRow(sheetX) {
  var arrVals = sheetX.getDataRange().getValues();
  for (var i = arrVals.length-1; i > 0; i--) {
    if (arrVals[i].join('')){
      return i+1
    }
  }
  return 0; 
}

我想,当我执行sheet.getLastRow()时,它实际上会抓取电子表格的最后一行,即使它没有被填充。我想在这里做的是实际获取电子表格的“最后填充行”。现在,我可以将活动范围设置为电子表格的填充部分。但是,由于工作表将不时填充,因此我必须动态确定填充的范围。那么,我应该怎么做才能动态地确定工作表中最后填充的行呢?对不起,伙计,我还没有把你的评论标记为答案。>哈哈,没问题。从你的评论来看,我认为你可能一路都有公式。在这种情况下,请尝试编辑答案中的函数。我的情况是,公式一直向下复制。我把它放在这里以备将来参考。见下面贴出的答案。另一种方法是,为处理速度明显更快的数组连接测试交换内部循环。Srik,如果我将其输入到空工作表的A1中:
=ArrayFormula(如果(行(B:B))通过在列B上创建ArrayFormula,您将填充整个列B(尽管为空)。因此,getDataRange()将考虑到这一点,并给出行数。这涉及的循环迭代次数要少得多,而且还避免了嵌套循环,因此我相信它应该比以前的解决方案更快。是的,但它看起来除了A列之外,其他任何地方都没有。Adam的解决方案扫描了整个工作表。脚本中没有奇迹;-)另外,我想知道这种迭代方法的性能-可能会调用大量的
getValues()
。是的,你对此很满意。我可能应该多做一些工作。ThanksI可能可以将相关范围的数据放入一个var中(就像u那样),然后在while条件下使用它。