Как получить следующий не отфильтрованный номер строки (один ниже по сравнению с текущей строкой) в Google Sheets с помощью скрипта? - PullRequest
0 голосов
/ 07 апреля 2020

Я хочу установить значение (следующий нефильтрованный номер строки) в 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)

1 Ответ

1 голос
/ 08 апреля 2020

В первом фрагменте кода, которым вы поделились, вы проверяете, скрывается ли выбранная в данный момент строка фильтром в каждой итерации из for l oop. Вы должны проверять разные строки в каждой итерации, поэтому вы должны использовать индекс l oop.

Например, вы можете сделать это:

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

Ссылка:

...