Сценарий сохранения и триггер onEdit - чем они отличаются? - PullRequest
0 голосов
/ 16 апреля 2019

Я пытаюсь запустить следующую функцию при обновлении электронной таблицы (в идеале, любое изменение в столбце А). По сути, скрипт передает имя и bgcolor активной ячейки. Если имя в строке ячейки соответствует переданному имени, а цвет строки соответствует этому активному цвету ячейки, он добавляет его в redCount и возвращает это количество.

Мой код работает при нажатии кнопки «Сохранить» в редакторе сценариев (значения обновляются), но не работает с триггерами Google (управляемыми по времени, «Из электронной таблицы») или даже когда он жестко запрограммирован с помощью onEvent ( е). Почему кнопка «Сохранить» в редакторе сценариев обрабатывает выполнение функции не так, как триггеры, и как мне это исправить?

/**
 * The number of times an Editor's Name appears on a red background.
 * @param {string} bgColour - A cell with the background colour we wish to track.
 * @param {string} editorName - The Editor's Name in quotation marks: "James".
 * @return The number of times an Editor's Name appears on a red background.
 * @customfunction
 */

function countSpreads(editorName) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  var rangeData = sheet.getDataRange();
  var lastRow = rangeData.getLastRow();
  var searchRange = sheet.getRange(1,2, lastRow-1);
  var actCell = sheet.getActiveCell();
  var activeBg = actCell.getBackground();
  var redCount = 0;
  var bgColors = searchRange.getBackgrounds();

  //Get array of values in the search Range
  var rangeValues = searchRange.getValues();
  // Loop through array and if condition met +1 to redCount
  for (j = 0 ;j < lastRow - 1; j++){
    if(rangeValues[j] == editorName && bgColors[j] == activeBg){
      redCount++;
    }
  };
  return redCount;  
}

1 Ответ

0 голосов
/ 17 апреля 2019

Одной из возможных причин может быть то, что оба метода getValues ​​() и getBackgrounds () возвращают двумерный массив.Итак, в вашем цикле for, когда вы вызываете rangeValues ​​[j], предполагая, что ячейка имеет значение «editorName», она возвращает «[editorName]» в скобках, а не «editorName», и аналогично для фона.Это может привести к тому, что ваше условие 'if' вернет false.

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