我遇到了getLastRow()的问题。我以为这个函数应该返回有数据的最后一行。但是由于我正在处理的工作表在填充数据的行下方有更多的空行,所以函数似乎进入并选择其执行的最后一个空行而不是选择具有数据的最后一行,这可能不是是相同的。有人可以告诉我如何解决这个异常现象。这是一个谷歌脚本错误还是我不清楚该怎么做?如果我不清楚,请提出进一步的问题。
答案 0 :(得分:7)
表格中是否有“全列”公式?数组公式,还是一直复制的公式?即使这些公式被设计为从底部返回空白单元格,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
}
答案 1 :(得分:0)
更简单的方法是
var lastRow = sheet.getDataRange().getValues().length ;
答案 2 :(得分:0)
这是当前所选答案的另一个版本。这将换出内部循环以进行数组连接,且各项目之间没有空格。这将连接该行上的所有字符。如果某个位置有一个字符,它将像当前答案一样被踢出。
我做了一些速度测试,虽然我认为所选答案可能会更快,但是由于某种原因,根据我的测试,这似乎处理得更快。我相信几年前我在堆栈溢出时发现了这个概念,但现在没有看到该参考。
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;
}
答案 3 :(得分:-1)
虽然Adams解决方案可以进行一些调整,但我通过一些搜索遇到了这个问题的另一个解决方案。我看到了一个应该找到第一个空行的代码,我想我可以简单地返回第一个空行后面的行来获取最后一个填充的行。我在这里附上代码:
function getLastPopulatedRow(sheet) {
var cell = sheet.getRange('a1');
var ct = 0;
while ( cell.offset(ct, 0).getValue() != "" ) {
ct++;
}
return (ct--);
}