GOOGLE SHEETS: проверка цвета ячейки и выходного значения - PullRequest
0 голосов
/ 23 сентября 2019

Я держу таблицу, полную дат.Я установил условное форматирование для этих дат одним из двух цветов (красный или зеленый).Теперь мне нужна формула для скрипта, который я могу запустить, чтобы определить, какие ячейки зеленые (в пределах указанного диапазона) и вывести числовое значение (сколько зеленых ячеек) в указанную ячейку.

Вореховая скорлупа.У меня есть 3 разных набора дат.Я хотел бы запустить скрипт, который будет считывать указанный диапазон ячеек и выводить числовое значение в указанную ячейку, которая сообщит мне, сколько зеленых клеток есть (в указанном диапазоне).

1 Ответ

2 голосов
/ 23 сентября 2019

Подсчет цветов

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, и следующие ячейки в этой строке указывают цвет и номер каждого цвета в той же ячейке.

Вот как это выглядит:

enter image description here

Выход находится в верхнем правом углу

ЕслиВы хотите считать только определенные цвета, вот модификация.

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])
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...