Автоматически скрывать столбцы, если значение ячейки истинно - PullRequest
0 голосов
/ 31 октября 2018

В Google Sheets есть функция флажка, которая помечается как ИСТИНА, если отмечена, и ЛОЖЬ, если не отмечена. Я пытаюсь найти способ скрыть строки, чей флажок установлен (или == TRUE) в столбце B. Однако скрипт не работает, и я не могу понять, почему.

function onOpen() {
  var s = SpreadsheetApp.getActive().getSheetByName('Scrum');
  s.showRows(1, s.getMaxRows());

  s.getRange('B:B')
    .getValues()
    .forEach( function (r, i) {
    if (r[0] == 'TRUE') 
      s.hideRows(i + 1);
    });
}

1 Ответ

0 голосов
/ 01 ноября 2018

Проблема в том, что стандартный флажок возвращает логическое значение.

Это может быть true или false, но НЕ TRUE или FALSE, которые не определены в Javascript.

Таким образом, они будут правильно проверять значение ячейки:

if (r[0] == true)           // test for boolean true
      s.hideRows(i + 1);

or

if (r[0]) 
      s.hideRows(i + 1);    // test for boolean true

но не

if (r[0] == 'TRUE')          // 'TRUE' is a string value
      s.hideRows(i + 1);

 or

if (r[0] == TRUE)            // TRUE is an undefined constant.
      s.hideRows(i + 1);

СЕЙЧАС супер запутанная вещь заключается в том, что в формулах true / false регистр не учитывается (TRUE / FALSE и true / false одинаковы). Так что будь осторожен !!

Также обратите внимание, что диапазон s.getRange('B:B') - это целые 1000 строк, которые могут замедляться. Например, лучше всего ограничить линию диапазона B1:B20. Не уверен, что это проблема для вас ...

РЕДАКТИРОВАТЬ: Ниже рабочий скрипт:

function hide() {
  var sheet = SpreadsheetApp.getActiveSheet();
  sheet.showRows(1, sheet.getMaxRows());

  var values = sheet.getRange('E1:E7').getValues();

  values.forEach( function (r, i) {
    Logger.log(r);
    if (r[0]) 
      sheet.hideRows(i + 1);
    }); 
}

Перед сценарием:

enter image description here

После сценария:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...