Function 获取特定列函数的最后一行-最佳解决方案

Function 获取特定列函数的最后一行-最佳解决方案,function,google-apps-script,range,Function,Google Apps Script,Range,使用“lastRow”可以获得工作表中的最后一行。有时您需要特定列的最后一行。谷歌应用程序脚本das不提供此功能。网站上已经有大约5个问题和解决方案,但都有一些特定的代码 我采用了我认为在大多数情况下最快的解决方案——从工作表的末尾开始,在指定的列中向后看——并从中生成了一个干净的函数 因此,这是初学者复制粘贴的一个贡献-参数“RowNumber”是您希望作为数字查看的列:0是a,1是B,2是C等。函数将最后一行作为数字(“4”)返回 因为我在第3天是一个应用程序脚本用户,所以我的问题是:如果这

使用“lastRow”可以获得工作表中的最后一行。有时您需要特定列的最后一行。谷歌应用程序脚本das不提供此功能。网站上已经有大约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
}

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

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

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

最后,它可能不会真正产生很大的差异,但您可以通过减少一个循环来减少每个循环的减法

将我的评论付诸实践,结果代码如下:

函数getLastRowOfColumn(columnNumber、optData、optSheet){ var data=optData!==null?optData:optSheet.getDataRange().getValues(); 变量行=data.length-1; 对于(;row>0&&data[row][columnNumber]='''.--row); 返回行+1; } 两个代码都有一个警告,我们只是通过检查一个单元格值来考虑为空。它可能有一个公式,根据定义,这意味着单元格不是空的,即返回一个空字符串。e、 g


=IF(A1=“返回false的比较”、“真的?”)

有更快的方法来执行此操作并消耗更少的api数据: 1) 您可以使用二进制搜索,而不是潜在地循环所有行。确保你的柱子上没有孔,这样才能起作用。 2) 通过执行getRange(“a1:a”),您可以只获取列而不是整个范围,但是您需要基于所需的列构造该范围字符串

您可以组合1和2 干杯