Ошибка условного форматирования скрипта Google листов: количество строк в данных не соответствует количеству строк в диапазоне

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

Исключение: количество строк в данных не соответствует количеству строк в диапазоне. В данных 920, а в диапазоне 999. (строка 52, файл " Код ")

  //Conditional Formatting for transaction status column
  var rangeA = sheet.getRange("L2:L");
  var valuesA = rangeA.getValues();
  var backgrounds = [];
  var textColorTransaction = [];
  
  for(var i = 0; i < valuesA.length; i++) { //for each row that the data is present
    var aValue = valuesA[i][0];
    if(aValue == "Declined"){ //if value = Declied
      backgrounds.push(["#F39581"]);
    } else if(aValue == "Credit"){
      backgrounds.push(["#FCE8B2"])
      textColorTransaction.push(["red"]);
    } else {
      backgrounds.push([null]); //using null will reset the background color formatting
      textColorTransaction.push([null])
      }
  }
  rangeA.setBackgrounds(backgrounds); //Set the background colors all at once for speed.
  rangeA.setFontColors(textColorTransaction);

Всего 1 ответ

Автоматический диспенсер мыльной пены от xiaomi.


Объяснение / проблема:

  • Вы забыли добавить строку для отправки элементов в textColorTransaction, когда первый блок оператора if оценивается как истина. Следовательно, textColorTransaction имеет меньший размер, чем ваш диапазон rangeA, после завершения цикла for.

  • Это потому, что цикл for повторяется до длины столбца, но вы не подталкиваете какие-либо элементы к textColorTransaction, когда значение ячейки равно "Declined". В результате textColorTransaction оказывается меньше длины valuesA.

  • Возможно, вашей целью будет заполнение столбца L, но вы можете рассмотреть до последней строки с содержимым. Вы можете заменить sheet.getRange("L2:L"); на sheet.getRange("L2:L"+sheet.getLastRow());. Это необязательный шаг, поэтому он не включен в мое решение.

Решение:

  var rangeA = sheet.getRange("L2:L");
  var valuesA = rangeA.getValues();
  var backgrounds = [];
  var textColorTransaction = [];
  
  
  for(var i = 0; i < valuesA.length; i++) { //for each row that the data is present
    var aValue = valuesA[i][0];
    if(aValue == "Declined"){ //if value = Declied
      backgrounds.push(["#F39581"]);
      textColorTransaction.push(["yellow"]); // <- NEW CODE ADDED
    } else if(aValue == "Credit"){
      backgrounds.push(["#FCE8B2"])
      textColorTransaction.push(["red"]);
    } else {
      backgrounds.push([null]); //using null will reset the background color formatting
      textColorTransaction.push([null])
      }
  }
  rangeA.setBackgrounds(backgrounds); //Set the background colors all at once for speed.
  rangeA.setFontColors(textColorTransaction);

Есть идеи?

10000