为什么GetActiveSheet导致此错误?

时间:2019-06-06 00:39:40

标签: google-apps-script

我正在尝试添加一个函数,以根据特定单元格的背景色来添加它们的值。我仍然遇到相同的错误。

不适用


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();

该行给我的错误是“无法调用null的方法“ GetActiveSheet”。

我不知道该如何解决。

1 个答案:

答案 0 :(得分:1)

如果当前没有活动范围,则

getActiveRange()返回null。看来您正在尝试添加自定义工作表功能,而不是通过UI按钮或触发器操作的功能。实际上,您的函数带有两个您似乎从未使用过的参数。

看看how to process input of a range inside custom functions -但是,考虑到custom functions are passed their arguments as values而不是范围,您需要将范围作为字符串传递(即=MYCUSTOMFUNCTION("A1:A")),然后在函数中使用...getRange(input)