当前位置: 首页 > 知识库问答 >
问题:

确定单列中的最后一行

严昀
2023-03-14

我有一张表,上面的数据是从AH

我需要确定列A中包含数据的最后一行(它都是连续的-数据/行中没有空隙)。

其他列中的数据行数也比列A多,因此我只需要隔离列A。(和/或只是列a内的一个范围)。

我可以在电子表格级别使用

=COUNTA(A2:A100)

然而,在我对谷歌应用脚本解决方案的所有研究中,我似乎只发现需要执行包含几十行代码的多种功能——包括大量的i内容...我可以通过直接从A1中抵消来做到这一点。

是否可能有特定于列的方法来修改此方法?

var aLast = ss.getDataRange().getNumRows();

如果需要一个复杂的过程,那么就这样吧。但我发现很难想象(甚至更难找到!)一个更简单的解决方案。

有没有人愿意启发我(或打破我的幻想)?

共有3个答案

巢宏富
2023-03-14

这将获得基于列a的工作表中的最后一行。

function getLastDataRow(sheet) {
  var lastRow = sheet.getLastRow();
  var range = sheet.getRange("A" + lastRow);
  if (range.getValue() !== "") {
    return lastRow;
  } else {
    return range.getNextDataCell(SpreadsheetApp.Direction.UP).getRow();
  }              
}

这修正了@mrityunjay pandey部分正确的答案。

要扩展此答案以获得最后一行和最后一列,我们可以使用:

function columnToLetter(column) {
  var temp, letter = '';
  while (column > 0) {
    temp = (column - 1) % 26;
    letter = String.fromCharCode(temp + 65) + letter;
    column = (column - temp - 1) / 26;
  }
  return letter;
}

function letterToColumn(letter) {
  var column = 0, length = letter.length;
  for (var i = 0; i < length; i++) {
    column += (letter.charCodeAt(i) - 64) * Math.pow(26, length - i - 1);
  }
  return column;
}

function getLastDataColumn(sheet) {
  var lastCol = sheet.getLastColumn();
  var range = sheet.getRange(columnToLetter(lastCol) + "1");
  if (range.getValue() !== "") {
    return lastCol;
  } else {
    return range.getNextDataCell(SpreadsheetApp.Direction.PREVIOUS).getColumn();
  }              
}

function getLastDataRow(sheet) {
  var lastRow = sheet.getLastRow();
  var range = sheet.getRange("A" + lastRow);
  if (range.getValue() !== "") {
    return lastRow;
  } else {
    return range.getNextDataCell(SpreadsheetApp.Direction.UP).getRow();
  }              
}

function run() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var [startRow, lastRow] = [2, getLastDataRow(sheet)];
  var [startCol, lastCol] = [1, getLastDataColumn(sheet)];
}
翟博雅
2023-03-14

虽然没有直截了当的公式,但我能想到,它不需要几十行代码就能找出A列的最后一行。试试这个简单的函数。在单元格中使用它,就像使用其他函数一样=CountColA()

function CountColA(){
  var sheet = SpreadsheetApp.getActiveSheet();
  var data = sheet.getDataRange().getValues();
  for(var i = data.length-1 ; i >=0 ; i--){
    if (data[i][0] != null && data[i][0] != ''){
      return i+1 ;
    }
  }
}
宿鹏程
2023-03-14

使用JavaScript技巧怎么样?

var Avals = ss.getRange("A1:A").getValues();
var Alast = Avals.filter(String).length;

我从这个答案中借用了这个想法。数组。filter()。

这只适用于单个列;如果该范围包含多个列,则filter()的结果将包括所有列中的单元格,因此超出该范围的填充维度。

 类似资料:
  • 瞧,它确实返回了一个比我最初预期的更大的数字,迫使我使用行中第一个单元格中的值作为循环的退出条件,如下所示: 这对我来说很有效,但我想知道是否有更好的方法。

  • 问题内容: 因此,我正在使用net / http包。我正在获取一个我肯定知道要重定向的URL。在到达最终网址之前,它甚至可能重定向了几次。重定向在后台自动处理。 有没有一种简单的方法来确定最终的URL是什么,而没有涉及在http.Client对象上设置CheckRedirect字段的棘手的解决方法? 我想我应该提一提我想出了一种解决方法,但这有点of脚,因为它涉及使用全局变量并在自定义http.C

  • 问题内容: 在对象上执行“ foreach”时,我想对上一次循环迭代做一些不同的事情。我正在使用Ruby,但对于C#,Java等也是如此。 所需的输出等效于: 显而易见的解决方法是使用将代码迁移到for循环,但是for每个解决方案都感觉更优雅。在循环中编码特殊情况的最优雅方式是什么?可以用foreach完成吗? 问题答案: 如何先获取对 最后一项* 的 引用 ,然后在foreach循环中将其用于比

  • 我如何修改下面的代码来只获取表中的最后一行,特别是列下的值?原因是,这是一个巨大的表,我需要最后一行,特别是键值,才能知道它加载了多少。我不在乎还有什么其他内容。 第1行: 第2行: 第3行:

  • 问题内容: 问题很简单。我的代码中有一个循环: 在此循环中,当我们处于第一次或最后一次迭代时,我想做出不同的反应。 这个怎么做? 问题答案: 您可以使用一个计数器:

  • 我正在加密字符串并将其存储在客户端的cookie中。。但是,当我从js向java代码发送完全加密的字符串时,它给出了前面提到的异常。 我用于加密和解密的代码是: 你能告诉我问题是什么吗??我尝试过stackoverflow上提到的解决方案。com和其他一些解决方案,但都不起作用。。我收到这个错误是因为我将加密字符串发送到JS,而它正在更改字符串的填充吗?