如何获取特定列中的下一个空单元格位置,谷歌应用程序脚本



我正在构建一个应用程序脚本来处理电子表格中的现有数据,并基于现有数据构建新的数据列。如何找到任何给定列中的下一个空单元格(而不是最后一个单元格(?

这是我最初写的代码。

function isempty(x, y){
alert(SpreadsheetApp.getActiveSheet().getRange(y, x).isBlank());
return SpreadsheetApp.getActiveSheet().getRange(y, x).isBlank();
}
function nextopencell(column){
var x = 0;
var b = 1;
while(b != 2){
x++;
var data = isempty(x, column);
if(data == true){
b = 2;
}
}
alert(x);
return x;
}

当一列中有5个非空单元格,其中第一个是列中的第一个单元格时,我希望返回值为6,但无论列中单元格的实际状态(非空、空(如何,函数都会返回3。
如有任何帮助,我们将不胜感激。

Sheet.getRange()期望行在第一,列在第二,因此翻转x&getRange()呼叫中的y

function isempty(x, y) {
alert(SpreadsheetApp.getActiveSheet().getRange(x, y).isBlank());
return SpreadsheetApp.getActiveSheet().getRange(x, y).isBlank();
}

此外,请阅读应用程序脚本最佳实践,并考虑改进脚本的方法。例如,在上面的代码段中,您将执行isBlank()两次,但只需要执行一次。

这是一种不同的方法。在我的代码中,我使用.getDataRange()方法。这将获取工作表中的所有数据,然后使用for循环,您可以迭代所有行,并使用参数指定您想要的值来自哪一列。

function nextopencell(column){
// Get the active spreadsheet and sheet
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];
// This represents ALL the data
var range = sheet.getDataRange();
var values = range.getValues();
// Build a new array to fill it with the desire data
var newColArray = [];
// Iterate over all rows
for (var i = 0; i < values.length; i++) {
// With the column we specify in what column we want to extract the data
if (values[i][column]) {
// fill array
newColArray.push(values[i][column]);
} else{
// Show what cells are empty
Logger.log("This is an empty cell at column " + (column+1).toString() + " and row " + (i+1).toString());
}
}
// This is the built array to fill a new column as you want
Logger.log(newColArray);
}

有关更多信息,您可以查看此。

相关内容

最新更新