Google App Script - изменить цвет ячейки, если он соответствует условию из строки - PullRequest
0 голосов
/ 21 февраля 2019

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

Вот как это выглядит: enter image description here

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

На изображении в качестве примера статья имеет два продвижения в прошлом + текущая строка, каждая из которых помечена как 1-6 зеленого цвета и разделена точкой с запятой (1-6 зеленого цвета; 1-6 зеленого цвета) для каждогоНеделя продаж. Я проверяю, содержится ли номер недели в одном из этих диапазонов, соответствует ли цвет ячейке соответствующего рекламного цвета.

Возможные цвета: синий, желтый, зеленый и фиолетовый с приоритетом синего цвета = высокий приоритет на всем пути вплоть до фиолетового = низкий приоритет.

Если номер продаж равен 0, то перезаписать ярко-красным цветом.

Я нашел сценарии для изменения цвета, но я действительно не знаю, как манипулировать ими, чтобы сделать что-то подобное.

Вот что я получил с другого сайта, это просто читает содержимое ячейки, и еслис надписью «открыть», это окрашивает его:

function myColorFunction() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var range = ss.getSheetByName("Form Responses 1").getRange(2,6,ss.getLastRow());
  var cellRange = range.getValues();

  for(i = 0; i<cellRange.length-1; i++){
     if(cellRange[i][0] == "Open")
     {
       ss.getSheetByName("Form Responses 1").getRange(i+2,6).setBackground("red");
       ss.getSheetByName("Form Responses 1").getRange(i+2,6).setFontColor('white');
     }
  }
}

Я бы хотел запустить такую ​​функцию, когда я отмечаю ячейку «флажок цветовой градации» и избавляюсь от условного форматирования, которое слишком медленное.

вот еще один пример:

enter image description here

обведенная ячейка продаж находится в столбце AO, который попадает в неделю 48, если в столбцеBB есть промоушен, который охватывает ту неделю, раскрась его цветом промоушена.В этом случае есть синяя неделя с 6 по 14, поэтому столбцы AY и AZ для этой строки должны быть окрашены в синий цвет.

Надеюсь, что это прояснит

Спасибо всем за драгоценную помощь

1 Ответ

0 голосов
/ 21 февраля 2019

Я думаю, что это делает то же, что и ваша версия, но немного быстрее.У меня все еще есть проблемы с тем, чтобы решить твою настоящую проблему.

function myColorFunction() {
  var ss=SpreadsheetApp.getActiveSpreadsheet();
  var sh=ss.getSheetByName("Form Responses 1")
  var rg=sh.getRange(2,6,ss.getLastRow());
  var bA=rg.getBackgrounds();//get all background in the range
  var fA=rg.getFontColors();//get all font colors in the range
  var vA=rg.getValues();//get all values

  for(i=0;i<vA.length-1;i++){
     if(vA[i][0]=="Open")
     {
       bA[i][0]='#ff0000';//i+2 is not necessary inside the array because range starts at column2
       fA[i][0]='#ffffff';
     }
  }
  rg.setFontColors(fA);//sets ones that didn't change and ones that did at the same time.
  rg.setBackgrounds(bA)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...