虽然我不知道这是不是一个好的方法,但介绍一下这种方法吧。这个方法没有使用循环。请将其视为样本之一。
- 获取您想要知道最后一行号的列数据。
- 将该列数据导入到新的电子表格中作为临时表(在这种情况下,您也可以向您当前正在使用的电子表格添加新表,它可用作临时表)。
- 使用
getLastRow()
获取最后一行号。
- 删除临时电子表格。
示例脚本:
var col = ##;
var ss = SpreadsheetApp.getActiveSheet();
var coldata = ss.getRange(1, col, ss.getLastRow(), 1).getValues();
var tempss = SpreadsheetApp.create("temporary_sheet");
tempss.getActiveSheet().getRange(1,1,coldata.length, coldata[0].length).setValues(coldata);
var last_row = tempss.getLastRow();
Drive.Files.remove(tempss.getId());
注意:
在上述情况下,即使列中有空单元格,也可以检索到最后一行的编号。如果该列没有空单元格,则可以通过以下脚本检索特定列的最后一行编号。这不会创建临时表。
var last_row = ss.getRange(1, col, ss.getLastRow(), 1).getValues().filter(String).length;
更新于2021年5月19日:
在这种情况下,我想采用以下两种模式。
通过从表格顶部搜索来检索特定列的第一个空单元格
通过从表格底部搜索来检索特定列的第一个非空单元格
为了实现上述目标,我认为可以使用以下两种模式。
检索该列的值,并使用循环搜索结果。
直接使用Google Apps Script的内置方法检索结果。
我测量了它们的处理成本。结果发现,以下两个脚本是所有方法中最低的。
1. 通过从表格顶部搜索来检索特定列的第一个空单元格
Object.prototype.get1stEmptyRowFromTop = function (columnNumber, offsetRow = 1) {
const range = this.getRange(offsetRow, columnNumber, 2);
const values = range.getDisplayValues();
if (values[0][0] && values[1][0]) {
return range.getNextDataCell(SpreadsheetApp.Direction.DOWN).getRow() + 1;
} else if (values[0][0] && !values[1][0]) {
return offsetRow + 1;
}
return offsetRow;
};
function main() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");
const res = sheet.get1stEmptyRowFromTop(3);
console.log(res);
}
- 请提供表格对象和列号。
- 在此脚本中,当使用第二个参数时,可以设置偏移行。例如,当第1行和第2行是标题行时,可以使用此脚本
const res = sheet.get1stEmptyRowFromTop(3, 2);
。
2.通过从表格底部向上搜索检索特定列的第一个非空单元格
对于这个问题,我认为这个模式可能比较适合。
Object.prototype.get1stNonEmptyRowFromBottom = function (columnNumber, offsetRow = 1) {
const search = this.getRange(offsetRow, columnNumber, this.getMaxRows()).createTextFinder(".").useRegularExpression(true).findPrevious();
return search ? search.getRow() : offsetRow;
};
function main() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");
const res = sheet.get1stNonEmptyRowFromBottom(3);
console.log(res);
}
- 请提供表格对象和列号。
- 在此脚本中,当使用第二个参数时,可以设置偏移行。例如,当第一行和第二行是标题行时,可以使用此脚本:
const res = sheet.get1stNonEmptyRowFromBottom(3, 2);
。
结果:
使用上述脚本时,将获得以下结果。
![enter image description here](https://istack.dev59.com/7891o.webp)
参考资料:
var Alast = Avals.filter(String).length;
变量中的 String 是什么意思? - Avazbek Ismanov