Подсчет цветов
function cellColors() {
var ss=SpreadsheetApp.getActive();
var sh=ss.getActiveSheet();
var rg=sh.getActiveRange();
var bgA=rg.getBackgrounds();
var cObj={cA:[]};
for(var i=0;i<bgA.length;i++) {
for(var j=0;j<bgA[i].length;j++) {
if(cObj.hasOwnProperty(bgA[i][j])) {
cObj[bgA[i][j]]+=1;
}else{
cObj[bgA[i][j]]=1;
cObj.cA.push(bgA[i][j]);
}
}
}
//Logger.log(cObj);
sh.getRange(1,26,1,100).clearContent().setBackground('#ffffff');//clear output area
var org=sh.getRange(1,26,1,cObj.cA.length);//output range
var ocA=[];
var onA=[];
for(var i=0;i<cObj.cA.length;i++) {
ocA.push(cObj.cA[i]);
onA.push(cObj[cObj.cA[i]]);
}
org.setBackgrounds([ocA]);
org.setValues([onA]);
}
Вывод отправляется на Z1, и следующие ячейки в этой строке указывают цвет и номер каждого цвета в той же ячейке.
Вот как это выглядит:
Выход находится в верхнем правом углу
ЕслиВы хотите считать только определенные цвета, вот модификация.
function cellColors2(colors) {
var colors=colors || '#008000';//This controls what color you want to limit yourself to counting are default '#008000' is green - '#008000,#ffffff' is green and white
var ss=SpreadsheetApp.getActive();
var sh=ss.getActiveSheet();
var rg=sh.getActiveRange();
var bgA=rg.getBackgrounds();
var cObj={cA:[]};
if(!colors) {
for(var i=0;i<bgA.length;i++) {
for(var j=0;j<bgA[i].length;j++) {
if(cObj.hasOwnProperty(bgA[i][j])) {
cObj[bgA[i][j]]+=1;
}else{
cObj[bgA[i][j]]=1;
cObj.cA.push(bgA[i][j]);
}
}
}
}else{
var colorA=colors.split(',');
for(var i=0;i<colorA.length;i++) {
cObj[colorA[i]]=0
cObj.cA.push(colorA[i]);
}
for(var i=0;i<bgA.length;i++) {
for(var j=0;j<bgA[i].length;j++) {
if(cObj.hasOwnProperty(bgA[i][j])) {
cObj[bgA[i][j]]+=1;
}
}
}
}
//Logger.log(cObj);
sh.getRange(1,26,2,100).clearContent().setBackground('#ffffff');//this controls what range gets clears each time
var org=sh.getRange(1,26,1,cObj.cA.length);//this control where the display is set
var ocA=[];
var onA=[];
for(var i=0;i<cObj.cA.length;i++) {
ocA.push(cObj.cA[i]);
onA.push(cObj[cObj.cA[i]]);
}
org.setBackgrounds([ocA]);
org.setValues([onA]);
org.offset(1,0).setValues([ocA])
}