Проверьте, имеют ли по крайней мере 3 ячейки в строке определенный фон

#google-apps-script

#google-apps-script

Вопрос:

1) У меня будет как минимум 4 столбца, где ячейки будут иметь разный фон 2) Я должен проверить, имеют ли по крайней мере 3 ячейки в строке, скажем, КРАСНЫЙ фон 3) Если это так — выведите что-нибудь в ячейке в этой строке, скажем, «ПРЕДУПРЕЖДЕНИЕ»

Я не специалист по js, единственное, что у меня есть, это:

 function check() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Canvas');
  if (sheet.getRange("E5").getBackground() == '#ff0e13' amp;amp; sheet.getRange("F5").getBackground() == '#ff0e13' amp;amp; sheet.getRange("D5").getBackground() == '#ff0e13') {
    return sheet.getRange('M5').setValue('Warning');
  }
}
  

Это позволяет проверять только определенные ячейки в определенной строке. Как я могу отредактировать это для работы с массивом («перетащить его по всем строкам»)?

Комментарии:

1. вы можете использовать getactiverange для работы с выделением developers.google.com/apps-script/reference/spreadsheet /…

2. Вы хотите, чтобы скрипт выполнял поиск по всему листу для каждого появления комбинации из 3 ячеек и соответствующим образом обновлялся?

Ответ №1:

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

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

 function checkBGColors() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Canvas');
  var maxWidthRange = sheet.getRange(1,1,sheet.getLastRow(),sheet.getMaxColumns());// get the whole filled part of the sheet   every possible column
  var BGColors = maxWidthRange.getBackgrounds();
  var Values = maxWidthRange.getValues();
  for(var n=0;n<BGColors.length;n  ){
    var count = 0;
    for(var BG in BGColors[n]){
      Logger.log(BGColors[n][BG]);
      if(BGColors[n][BG] == '#ff0000'){
        count   ; // if BG color is red then increment counter
      }
    }
  Logger.log('Count = ' count);
    if(count >= 3){
      Values[n][12] = 'Warning' ;// column M is index 12, adapt if needed
      BGColors[n][12] = 'Orange';// eventually colorize the warning cell
    }
  }
  maxWidthRange.setValues(Values);// update values
  maxWidthRange.setBackgrounds(BGColors);//update colors
}