Google Sheets: Как я могу написать собственную формулу, которая подсчитывает количество ячеек в зависимости от цвета? - PullRequest
0 голосов
/ 03 марта 2020

В настоящее время у меня есть следующий код, который я нашел в сети, но я получаю сообщение об ошибке «Ошибка типа: Не удается прочитать свойство 'pop' со значением NULL (строка 6, файл" Код ")"

Я хочу чтобы иметь возможность создать собственную формулу, которую я затем могу использовать как обычную формулу, которую я могу связать и ссылаться на ячейки. Другие версии этого кода имеют ссылки на ячейки в виде жесткого кода stati c, поэтому я хотел использовать эту версию. Любая помощь приветствуется - я новичок в этом, поэтому я могу упустить что-то действительно очевидное.

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 Ответ

1 голос
/ 03 марта 2020

Подсчет цветов фона активного диапазона

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...