@Obesanjo

Почему не срабатывает условие if?

Помогите понять, почему условие if не срабатывает?

По условию позиции без галочки в спецификации (фото 1), при соблюдении четырех условий (название изделия, количество, значения в ячейке "А1" и фон не красный, ) должны быть найдены и окрашены в красный цвет в таблице Склада (фото 2).

637fc6842f88e020903603.jpeg

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

637fc68d1509d784547169.jpeg

function unReserve() {
  var SPREADSHEET_ID = 'ключ таблицы';
  var SHEET_NAME = 'Лист1'; 
  var wareHouse = SpreadsheetApp.openById(SPREADSHEET_ID).getSheetByName(SHEET_NAME);
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var chekBoxOn = "true";
  var chekBoxOff = "false";
  var colorGreen = '#66ff00';
  var colorRed = '#ff0000';
  var findingRange = sheet.getRange('F:F').getValues();
  var findingRangeColor = sheet.getRange('F:F').getBackgrounds();
  var findingRangeColor2 = wareHouse.getRange('C:C').getBackgrounds();
  var valuesC = wareHouse.getRange('C:C').getValues();
  var valuesI = wareHouse.getRange('I:I').getValues();
  var valuesR = wareHouse.getRange('R:R').getValues();
  
mark:
  for(i=0; i<findingRange.length; i++){
    if(findingRange[i] == chekBoxOff && findingRangeColor[i] == colorGreen){
      let getA = sheet.getRange(i+1,1).getValue(); 
      let getB = sheet.getRange(i+1,2).getValue(); 
      let getI = sheet.getRange(1,1).getValue(); 
      sheet.getRange(i+1,6).setBackground(colorRed);
        for(j=0; j<12; j++){
          if(findingRangeColor2[j] != colorRed && valuesC[j] == getA && valuesI[j] == getB && valuesR[j] == getI){
            wareHouse.getRange(j+1,3).setBackground(colorRed); 
            Logger.log('i = ' + i);
            Logger.log('j = ' + j);
            continue mark;
          }
        }
    }
  }
}


637fc694ddc9c826124873.jpeg
  • Вопрос задан
  • 53 просмотра
Решения вопроса 1
Dr_Elvis
@Dr_Elvis
В гугле забанен
После покраски в красный цвет у вас продолжается цикл, но переменная findingRangeColor2 определена ДО цикла, а на тот момент красного цвета в бэкграунде нет. Поэтому условие и срабатывает. Вам нужно после покраски обновлять переменную, которая содержит цвета на текущий момент.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы