Как создать функцию onEdit с помощью insertCheckboxes и TRUE / FALSE? - PullRequest
0 голосов
/ 07 января 2020

В Z6 есть формула: if the checkbox in E6 = TRUE (i.e. checked) then 'X' else 'Y'. Это отлично работает. К сожалению, некоторые пользователи по ошибке снимают флажок, и поэтому мне нужно реализовать logi c, чтобы добавить его обратно. Я пытаюсь реализовать лог c, как предложено здесь , но как onEdit. Я действительно не знаю, что я делаю, поэтому предложения ОЧЕНЬ приветствуются:

function onEdit(e) {
  var rangeList = SpreadsheetApp.getActive().getSheetByName('Sheet1').getRangeList(['E6:E7']);
  for (var i=0; i<rangeList.getRanges().length; i++ ) {
    var range = rangeList.getRanges()[i];
    for (var j=0; j<range.getValues().length; j++ ) {
      var value = range.getValue()[j];
      Logger.log("i: " + i);
      Logger.log("j: " + j);
      Logger.log("value: " + value);
      var values = range.getValues();
      for ( var val in values ) {
        Logger.log("values[val]: " + values[val]);
        if( values[val] != 'TRUE' && values[val] != 'FALSE' ) {
          range.insertCheckboxes('TRUE', 'FALSE');
          Logger.log("arrived at insert checkbox");
        }
      }
    }
  }
}

E6:E7 - это только первый диапазон (всего около 30). Это происходит так, как и предполагалось, НО до первого выполнения onEdit, следующая формула =WENN(E7=FALSE();"is false";E7) показывает is false. НО после запуска скрипта результат формулы будет FALSE. Таким образом, прежде чем я активирую выше onEdit функцию, формула =WENN(E7=FALSE();"is false";E7) показывает is false.

Как только я активирую выше onEdit функцию, не имеет значения, какую ячейку я изменяю, результат формулы переключается на FALSE. Вот протокол протокола для этого начального прогона, изменяющего любую ячейку, кроме E6:E7:

[20-01-07 15:11:33:557 CET] i: 0
[20-01-07 15:11:33:558 CET] j: 0
[20-01-07 15:11:33:558 CET] value: F
[20-01-07 15:11:33:559 CET] values[val]: FALSE
[20-01-07 15:11:33:559 CET] values[val]: TRUE
[20-01-07 15:11:33:560 CET] i: 0
[20-01-07 15:11:33:560 CET] j: 1
[20-01-07 15:11:33:560 CET] value: A
[20-01-07 15:11:33:561 CET] values[val]: FALSE
[20-01-07 15:11:33:561 CET] values[val]: TRUE

Аналогично, следующие формулы для ячеек H6 и H7:

  • =WENN(H6=FALSE();"is false";H6) показывает is false.
  • =WENN(H7=FALSE();"is false";H7) показывает is false.

Вот журнал, когда я выполняю действие копирования H6:H7 в ячейки E6:E7:

[20-01-07 06:01:50:720 PST] i: 0
[20-01-07 06:01:50:720 PST] j: 0
[20-01-07 06:01:50:721 PST] value: undefined
[20-01-07 06:01:50:722 PST] values[val]: false
[20-01-07 06:01:50:897 PST] arrived at insert checkbox
[20-01-07 06:01:50:898 PST] values[val]: true
[20-01-07 06:01:51:041 PST] arrived at insert checkbox
[20-01-07 06:01:51:168 PST] i: 0
[20-01-07 06:01:51:168 PST] j: 1
[20-01-07 06:01:51:169 PST] value: A
[20-01-07 06:01:51:170 PST] values[val]: FALSE
[20-01-07 06:01:51:170 PST] values[val]: TRUE

Опять в конце формула =WENN(E7=FALSE();"is false";E7) показывает FALSE.

Мне нужно, чтобы после повторного создания удаленного флажка onEdit функция, формула =WENN(E7=FALSE();"is false";E7) показывает is FALSE.

1 Ответ

1 голос
/ 07 января 2020

Думаю, проблема в том, что при создании флажка вы предоставляете строки TRUE и FALSE в качестве пользовательских значений для отмеченных и непроверенных состояний, а строка FALSE не совпадает с возвращаемым логическим значением в FALSE().

Если вы не предоставляете пользовательские значения для insertCheckboxes () , значения по умолчанию отмечены / не отмечены как логические true и false, которые в этом последний случай, соответствует значению, возвращаемому встроенной функцией FALSE () . Поэтому вывод «ложь», когда флажок снят.

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

range.insertCheckboxes('TRUE', 'FALSE');

Для этого:

range.insertCheckboxes();

Надеюсь, это поможет.

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