如何找到一个区域的最后一行?

3

当我使用 sheet.getLastRow(); 时,它会返回最后一个有内容的行。

但是当我使用 range.getLastRow(); 时,它会返回范围内的最后一行,而不考虑其中的内容。

有人能否建议一种方法来查找范围内最后一个被占用的单元格。

3个回答

0

您可以在通过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]);
    }
  }  
}

我认为这对于数据之前的任何空单元格都不起作用。例如...如果数据从第11行开始,则会错误地标记最后一行。此外,如果数据是非连续的,则会停止在第一个空单元格处。 - DanCue

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);
}

虽然这是一个旧帖子,但我想在这里添加一些反馈。不幸的是,这仅适用于一列。我相信用户正在寻找范围内的最后一行。假设为“A1:B”。 - DanCue

0
我在查找解决方案时偶然发现了这个。不幸的是,提供的答案没有根据我认为的 OP 的要求提供解决方案。由于我所需的内容类似,因此我着手准备了一些东西。它可能不是最好的解决方案,但它解决了 OP 的问题以及我的问题。
我的假设如下: - 您想要任何具有内容的给定范围的最后一行。 - 提供的范围可以有多个列。
建议的解决方案:
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);

工作原理:

确定每列的最后一行具有内容,然后将其放入一个数组中进行排序。数组中的第一个条目应该是最高计数值,并返回该值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接