当我使用 sheet.getLastRow();
时,它会返回最后一个有内容的行。
但是当我使用 range.getLastRow();
时,它会返回范围内的最后一行,而不考虑其中的内容。
有人能否建议一种方法来查找范围内最后一个被占用的单元格。
当我使用 sheet.getLastRow();
时,它会返回最后一个有内容的行。
但是当我使用 range.getLastRow();
时,它会返回范围内的最后一行,而不考虑其中的内容。
有人能否建议一种方法来查找范围内最后一个被占用的单元格。
您可以在通过getRange().getValues()返回的列表中创建一个循环,检查列表中当前位置是否为空。
function getLastRowWithTextInARange() {
var sheet = SpreadsheetApp.getActiveSheet();
var range = sheet.getRange(1,1,5,1).getValues();
for (var i=0; i<range.length; i++){
if (range[i][0] == ""){
Logger.log("Last row with content in the range.");
break;
} else {
Logger.log(range[i][0]);
}
}
}
我在之前的帖子中提供了一段代码,它返回填充范围(针对一列)。您可以按以下方式进行测试:
function readRows() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet2');
var values = getPopulatedRange(sheet,"B").getValues(); // assuming Col B is your range
var lastCell = "B" + values.length;
var lastCellValue = values.reverse()[0];
Logger.log(values); // gives all values upto the final populated in your range
Logger.log(lastCell); // shows the last cell in notation like: B8
Logger.log(lastCellValue); // shows the last populated cell value
};
function getPopulatedRange(ss,column) { //Returns the range in a single column from row 1 to the last populated cell in that column
var lastRow = ss.getMaxRows();
var values = ss.getRange(column + "1:" + column + lastRow).getValues();
for (; values[lastRow - 1] == "" && lastRow > 0; lastRow--) {}
return ss.getRange(column + "1:" + column + lastRow);
}
function getLastRowInRange(ss, columnsArr) { //Use numbers for columns in array
var arr = [];
//Find last row in each column
for(var i in columnsArr){
let lastRN = ss.getRange(ss.getLastRow() + 1,columnsArr[i]).getNextDataCell(SpreadsheetApp.Direction.UP).getRow();
arr.push([columnsArr,lastRN])
}
//Sort and return highest count
arr.sort(function(a,b){return b[1]-a[1]})
return arr[0][1];
}
使用示例:
var sh = SpreadsheetApp.getActiveSheet();
var tss = SpreadsheetApp.getActive();
var namedSht = tss.getSheetByName('Name of Sheet');
var columnsArr = [1,2,4]; //Columns A, B and D
getLastRowInRange(namedSht, columnsArr);
工作原理:
确定每列的最后一行具有内容,然后将其放入一个数组中进行排序。数组中的第一个条目应该是最高计数值,并返回该值。