虽然不知道这个方法好不好,但是这个方法怎么样?此方法不使用循环。请将此作为样本之一进行检查。
- 检索您想知道最后一行数的列数据。
- 将列数据作为临时工作表导入新电子表格。(在这种情况下,您还可以在当前使用的电子表格中添加一个新工作表,它可以用作临时工作表。)
- 使用 检索最后一行的编号
getLastRow()
。
- 删除临时电子表格。
示例脚本:
var col = ##; // Here, please input a column number.
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(); // The number of last row
Drive.Files.remove(tempss.getId()); // In this case, the file is removed using Drive API.
笔记 :
在上述情况下,即使列有空单元格,也可以检索最后一行的数量。如果该列没有空单元格,您可以通过以下脚本检索特定列的最后一行的数量。这不会创建临时工作表。
var last_row = ss.getRange(1, col, ss.getLastRow(), 1).getValues().filter(String).length;
2021 年 5 月 19 日更新:
在这种情况下,我想使用以下两种模式。
通过从工作表的顶部搜索来检索特定列的第一个空单元格
通过从工作表的底部搜索来检索特定列的第一个非空单元格
为了实现上述,我认为可以使用以下2种模式。
检索列的值并使用循环搜索结果。
使用 Google Apps 脚本的内置方法直接检索结果。
我测量了他们的流程成本。结果发现,以下 2 个脚本是所有方法中最低的。
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;
};
// Please run this function.
function main() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");
const res = sheet.get1stEmptyRowFromTop(3);
console.log(res); // Retrieve the 1st empty row of column "C" by searching from TOP of sheet.
}
- 请给出工作表对象和列号。
- 在此脚本中,当使用第二个参数时,您可以设置偏移行。例如,当第 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;
};
// Please run this function.
function main() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");
const res = sheet.get1stNonEmptyRowFromBottom(3);
console.log(res); // Retrieve the 1st non empty row of column "C" by searching from BOTTOM of sheet.
}
- 请给出工作表对象和列号。
- 在此脚本中,当使用第二个参数时,您可以设置偏移行。例如,当第 1 行和第 2 行是标题行时,您可以将此脚本用作
const res = sheet.get1stNonEmptyRowFromBottom(3, 2);
.
结果:
使用上述脚本时,会得到以下结果。
参考: