Случайно назначить цвет фона ячейки на основе уникальных текстов ячейки - PullRequest
0 голосов
/ 02 апреля 2020

Я ищу решение для условного форматирования, в котором для нового цвета фона ячейки задан уникальный текст . Изображение ниже показывает это.

enter image description here

Хитрость в том, что я заранее не знаю ни одного из значений в списке.

1 Ответ

0 голосов
/ 03 апреля 2020

Как назначить ячейке уникальный цвет onEdit

  • Apps Script onEdit триггер запускает вашу функцию автоматически каждый раз, когда (вручную!) Редактирование было выполнено в вашем скрипте
  • Функция onEdit должна сравнивать вашу новую запись (последнюю строку предварительно определенного столбца) с уже существующими значениями в столбце с помощью indexOf ()
  • Если значение уже существует - используйте getBackground () , чтобы получить цвет фона соответствующей ячейки и назначить его новой ячейке с помощью setBackground (color)
  • Если значение еще не существует:
  • Если значение уже существует - ему будет автоматически назначен правильный фон коло по уже существующим правилам.

Образец:

function onEdit(e) {
  if(e.range.getColumn()==1){
    var text = e.value;
    var sheet = SpreadsheetApp.getActive().getActiveSheet();
    var range = sheet.getRange(1,1,sheet.getLastRow(),1);
    var values = range.getValues();
    var array = [];
    var row = e.range.getRow();
    for (var i =0; i <values.length; i++){
      if(row!=(i+1))
      {
        array.push(values[i][0]);
      }
    }
    if(array.indexOf(text)==-1){
      var backgrounds = range.getBackgrounds();
      var color = getRandomColor();
      while(backgrounds.indexOf(color)>-1){
        color = getRandomColor();
      }
      buildConditionalFormatting(text, color)
    }
  } 
}

function getRandomColor() {
  var letters = '0123456789abcdef';
  var color = '#';
  for (var i = 0; i < 6; i++) {
    color += letters[Math.floor(Math.random() * 16)];
  }
  return color;
}


function buildConditionalFormatting(text, color){
  var sheet = SpreadsheetApp.getActiveSheet();
  var formattingRange = sheet.getRange("A:A");
  var rule = SpreadsheetApp.newConditionalFormatRule()
  .whenTextEqualTo(text)
  .setBackground(color)
  .setRanges([formattingRange])
  .build();
  var rules = sheet.getConditionalFormatRules();
  rules.push(rule);
  sheet.setConditionalFormatRules(rules);

}


...