如何使用脚本在 Google 工作表中获取下一个未过滤的行号(从当前行向下一个)?

How to get the next not filtered row number (one down from current row) in Google Sheets with script?

我想在A1中设置值(下一个未过滤的行号)。使用函数 isRowHiddenByFilter,我在另一个上下文中经历了长达 15 秒的时间。希望执行速度会更快。

var s = SpreadsheetApp.getActive().getActiveSheet();

function a() {
  var x = s.getCurrentCell().getRow();
  for(y = 1; s.isRowHiddenByFilter(x); ++y);
  s.getRange('A1').setValue(x);
}

我试过的下一种方法不起作用

var s = SpreadsheetApp.getActive().getActiveSheet();

function a() {
  var lastColumn = s.getActiveRange().getLastColumn();
  var x = s.getActiveRange().offset(1, -lastColumn+1).getValue();
  var y = s.getRange('D1').setValue(x);
}

D1的公式

=MATCH(D1, A:A, 0)

在您分享的第一个代码片段中,您在 for 循环的 每次迭代 中检查当前选定的行是否被过滤器隐藏。您应该在每次迭代中检查不同的行,因此您应该使用循环索引。

例如,您可以这样做:

function nextNotFilteredRow() {
  var s = SpreadsheetApp.getActive().getActiveSheet();
  var startRow = s.getCurrentCell().getRow() + 1;
  for (var i = startRow; i <= s.getLastRow(); i++) {
    if (!s.isRowHiddenByFilter(i)) {
      s.getRange('A1').setValue(i);
      return;
    }
  }
}

参考: