Google表格:如何编写自定义公式来根据颜色计算单元格的数量?

时间:2020-03-03 02:52:19

标签: google-apps-script google-sheets

我目前有在网上找到的以下代码,但出现错误“ TypeError:无法读取null的属性'pop'(第6行,文件“代码”)”

我希望能够创建一个自定义公式,然后像常规公式一样使用它,我可以链接和引用单元格。此代码的其他版本将单元格引用作为静态硬代码,因此我想使用此版本。感谢您的帮助-我是新手,所以我可能会错过一些明显的东西。

function countColoredCells(countRange,colorRef) {
  var activeRange = SpreadsheetApp.getActiveRange();
  var activeSheet = activeRange.getSheet();
  var formula = activeRange.getFormula();
  
  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 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;
};

1 个答案:

答案 0 :(得分:1)

计算活动范围的背景颜色

function countBGColors() {
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getActiveSheet();
  var rg=sh.getActiveRange();
  var bA=rg.getBackgrounds();
  var color={cA:[]};
  for(var i=0;i<bA.length;i++) {
    for(var j=0;j<bA[i].length;j++) {
      if(!color.hasOwnProperty(bA[i][j])) {
        color[bA[i][j]]=1;
        color.cA.push(bA[i][j]);
      }else{
        color[bA[i][j]]+=1;
      }
    }
  }
  sh.getRange(1,1,1,50).setBackground('#ffffff');
  sh.getRange(1,1,1,50).setValue('');
  sh.getRange(1,1,1,color.cA.length).setBackgrounds([color.cA]);
  for(var i=0;i<color.cA.length;i++) {                                             
    sh.getRange(1,i+1).setValue(color[color.cA[i]])
  }
}

脚本对颜色进行计数,并按照遇到颜色的顺序显示颜色。然后将颜色放置在右上角,并将每种颜色的编号放置在其单元格中。

动画:

enter image description here