функция работает в режиме «открыто», но не при запуске по таймеру - PullRequest
0 голосов
/ 04 февраля 2020

Когда я открываю свой лист, следующей функции требуется до 30 минут для вычисления всех ячеек. Поэтому я пытаюсь установить таймер для запуска этого скрипта каждый час, поэтому при открытии листа мне не нужно ждать 30 минут.

/**
* @param {A1:A2} countRange Range to be evaluated
* @param {A1} colorRef Cell with background color to be searched for in countRange
* @return {number}
* @customfunction
*/

function countColoredCells(countRange,colorRef) {
  var activeRange = SpreadsheetApp.getActiveRange();
  var activeSheet = activeRange.getSheet();
  var formula = activeRange.getFormula();

  var rangeA1Notation = formula.match(/\((.*)\;/).pop().replace(/\s/g, "");
  var range = activeSheet.getRange(rangeA1Notation);
  var bg = range.getBackgrounds();
  var values = range.getValues();

  var colorCellA1Notation = formula.match(/\;(.*)\)/).pop().replace(/\s/g, "");
  var colorCell = activeSheet.getRange(colorCellA1Notation);
  var color = colorCell.getBackground();

  var count = 0;

  for(var i=0;i<bg.length;i++)
    for(var j=0;j<bg[0].length;j++)
      if( bg[i][j] == color )
        count=count+1;
  return count;
}

Теперь, когда используется таймер, я получаю следующую ошибку:

, пожалуйста, сначала выберите активный лист. at countColoredCells (CountColor: 9)

Как я могу решить эту проблему?

Ответы [ 2 ]

1 голос
/ 04 февраля 2020

Согласно документам , getActiveRange()

Возвращает ... ноль, если нет активного диапазона.

С таймером лист предположительно закрыт. И нет активного диапазона для работы.

Вам лучше указать лист, с которым вы хотите работать. И эта функция принимает параметры. Поэтому, возможно, используйте это, чтобы указать используемый лист.

0 голосов
/ 04 февраля 2020

Просто измените эту строку:

var activeRange = SpreadsheetApp.getActiveRange();

На это:

var activeRange = SpreadsheetApp.getActiveSheet().getActiveRange();

Я надеюсь, что это поможет.

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