我目前有在网上找到的以下代码,但出现错误“ 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;
};
答案 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]])
}
}
脚本对颜色进行计数,并按照遇到颜色的顺序显示颜色。然后将颜色放置在右上角,并将每种颜色的编号放置在其单元格中。
动画: