获取特定列功能的最后一行 - 最佳解决方案

时间:2013-05-25 10:03:00

标签: function google-apps-script range

使用“lastRow”可以获得工作表中的最后一行。有时您需要特定列的最后一行。 Google Apps脚本不提供此功能。网站上已经有大约5个问题和解决方案,但都有一些特定的代码。

我认为解决方案在大多数情况下是我认为最快的 - 您开始查看工作表的末尾并向后查看您指定的列 - 并从中创建一个干净的功能。

所以这是初学者复制粘贴的一个贡献 - 参数“RowNumber”是你想要看作一个数字的列:0是A,1是B,2是C等。函数返回最后一个行作为数字(“4”)

因为我在第3天作为应用脚本用户,我的问题是:如果这不是最快速和最干净的方式,或者脚本在某些情况下无法正常工作,请告诉我。对于我的用例,它完美无缺。

function getLastColumnRow(RowNumber, sheet) {
  var data = sheet.getDataRange().getValues();
  var numRows = data.length;

 // loop from bottom to top for last row in given row "RowNumber"
  while( data[numRows - 1][RowNumber] == "" && numRows > 0 ) {
    numRows--;
  }
  return numRows
}

2 个答案:

答案 0 :(得分:1)

您的代码只有一个小错误,您应该使用===运算符而不是==。因为您将“0”值视为空。如果您不知道它们之间的区别,请尝试快速搜索以了解更多信息。

虽然您将列号保存为“RowNumber”的变量命名为奇怪,为什么不将“columnNumber”命名为?这对我来说更有意义。

我通常尝试对我的所有脚本执行的另一件事是减少API调用。在搜索之后我很需要其他地方的数据。因此,如果此函数直接接受数据而不是工作表对象,那将是很好的。或者可能是其中之一。

最后,它可能并没有真正产生很大的影响,但你可以通过少开一个减少每个循环减去一次。

将我的评论付诸实践,这是结果代码:

function getLastRowOfColumn(columnNumber, optData, optSheet) {
  var data = optData !== null ? optData : optSheet.getDataRange().getValues();
  var row = data.length-1;
  for( ; row > 0 && data[row][columnNumber] === ''; --row ) ;
  return row+1;
}

我们的代码都有一个警告,我们只是通过检查单元格值来考虑空白。它可能有一个公式,根据定义意味着该单元格不是空白,即返回一个空字符串。 e.g。

=IF(A1="Some comparison that returns false"; "really?"; "")

答案 1 :(得分:0)

有更快的方法可以做到并消耗更少的api数据: 1)您可以使用二进制搜索而不是循环所有行。确保列中没有孔可以使其工作。 2)你可以通过执行getRange(“a1:a”)来获得列而不是整个范围,但是你需要根据你想要的列来构造范围字符串

你可以结合1& 2 干杯