Google apps script 函数在打开时工作,但在计时器运行时不工作

Google apps script 函数在打开时工作,但在计时器运行时不工作,google-apps-script,Google Apps Script,当我打开工作表时,以下函数将花费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 *

当我打开工作表时,以下函数将花费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;
}
/**
*@param{A1:A2}countRange要计算的范围
*@param{A1}colorRef单元格,其背景色将在countRange中搜索
*@return{number}
*@customfunction
*/
函数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(colorcella1表示法);
var color=colorCell.getBackground();
var计数=0;
根据,
getActiveRange()

如果没有活动范围,则返回…null

有了计时器,工作表大概是关闭的,并且没有活动范围可以使用

最好指定要使用的工作表。此函数接受参数。因此,也许可以使用该函数指定要使用的工作表。

只需更改此行:

var-activeRange=SpreadsheetApp.getActiveRange();
为此:

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

我希望这能有所帮助。

欢迎使用堆栈溢出。您是否真的从
activeRange.getSheet();
中得到了任何东西?因为我有12个不同的工作表,而且必须处理所有工作表,所以我没有这样做。不过无论如何,谢谢!