Почему GetActiveSheet вызывает эту ошибку? - PullRequest
1 голос
/ 06 июня 2019

Я пытаюсь добавить функцию для добавления значений определенных ячеек в зависимости от их цвета фона.Я продолжаю получать ту же ошибку.

N / A


function sumbycolor(sumRange,colorRef) {
  var activeRange = SpreadsheetApp.getActiveRange();
  var activeSheet = activeRange.getActiveSheet();
  var formula = activeRange.getFormula().toString();
  formula = formula.replace(new RegExp(';','g'),',');


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

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

  var total = 0;

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

var activeSheet = activeRange.getActiveSheet ();

Эта строкавыдает ошибку «Невозможно вызвать метод« GetActiveSheet »с нулевым значением.

Я не знаю, как это исправить.

1 Ответ

1 голос
/ 06 июня 2019

getActiveRange () возвращает null, если в данный момент нет активного диапазона.Похоже, вы пытаетесь добавить функцию пользовательских листов, а не функцию, которая работает через кнопку или триггер пользовательского интерфейса.Фактически ваша функция принимает два параметра, которые вы никогда не используете.

Посмотрите на как обрабатывать ввод диапазона внутри пользовательских функций - однако, учитывая, что пользовательским функциям передаются их аргументы в виде значений , а не какдиапазон, вам нужно будет передать диапазон в виде строки (например, =MYCUSTOMFUNCTION("A1:A")), а затем использовать ...getRange(input) в вашей функции.

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