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);
}