使用“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
}
答案 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 干杯