3

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

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

谁能建议一种方法来找到该范围内最后一个被占用的单元格。

4

3 回答 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]);
    }
  }  
}
于 2013-04-24T09:03:35.340 回答
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);
}
于 2013-04-24T09:16:17.580 回答
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);

这个怎么运作:

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

于 2020-05-27T21:58:00.923 回答