Google apps script для условного форматирования цвета одной ячейки на основе другого значения ячейки

Я пытаюсь собрать приложения Google script, которые меняют цвет шрифта ячейки на основе значения другой ячейки. Если ячейка B2 > D2, измените цвет шрифта B2 на красный. Проблема в том, что у меня нет опыта работы с javascript... поэтому маленький script экземпляр, скопированный и отредактированный вместе, не работает.

function formatting() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1');
  var columnO = sheet.getRange(2, 2, sheet.getLastRow()-1, 1);
  var oValues = columnO.getValues();
  var column1 = sheet.getRange(2, 4, sheet.getLastRow()-1, 1);
  var oValues1 = columnO.getValues();

  for (var i = 0; i < oValues.length; i++) {
    if (oValues[i][0] > oValues1[i][0]) {
      sheet.getRange(i, 1, 1, 1).setFontColors('red');
    }
  }
}

Я хотел бы расширить этот script, чтобы иметь возможность: если B2 > D2 цвет красный, и если B2 < C2 цвет синий, в противном случае цвет зеленый.

Ответ 1

Первое, что я вижу, это ошибка/опечатка на строке 6: column0.getValues() должно быть column1.getValues().

Другая ошибка для цикла for, где вы getRange(i, 1, 1, 1). На ваш вопрос, который вы написали, вы хотите изменить цвет ячейки B2, и этот оператор меняет столбец A. Кроме того, индекс строки должен начинаться с 2, а не с 0.

Еще одна важная вещь, которую следует учитывать при использовании script, - это использование пакетных функций, поскольку это значительно ускорит ее, например.

function formatting() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1');
  var values = sheet.getRange(2, 2, sheet.getLastRow()-1, 3).getValues(); //B, C and D
  var colors = [];  

  for (var i = 0; i < values.length; i++)
    colors.push([values[i][0] > values[i][2] ? 'red' :
                 values[i][0] < values[i][2] ? 'blue' : 'green']);
  sheet.getRange(2, 2, colors.length, 1).setFontColors(colors);
}