Задать вопрос
@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
  • Вопрос задан
  • 81 просмотр
Подписаться 1 Простой Комментировать
Решения вопроса 1
Dr_Elvis
@Dr_Elvis
В гугле забанен
После покраски в красный цвет у вас продолжается цикл, но переменная findingRangeColor2 определена ДО цикла, а на тот момент красного цвета в бэкграунде нет. Поэтому условие и срабатывает. Вам нужно после покраски обновлять переменную, которая содержит цвета на текущий момент.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы