Все, что у меня есть, - это трекер с высокими значениями, который работает в первом ряду только для нужных ячеек. Довольно неловко, я не могу понять, как применить его ко всем столбцам.
Код, связанный с вашей электронной таблицей:
function onEdit() {
var sheet = SpreadsheetApp.getActiveSheet();
var range = sheet.getRange("D2:E2");
var values = range.getValues()[0];
range.setValues([[values[0], Math.max(values[0], values[1])]]);
}
Что делает этот код?
- Он устанавливает диапазон для работы всегда на
D2:E2
- независимо от того, какой фактический отредактированный диапазон равен - Он работает только с первой строкой диапазона (
range.getValues()[0]
) - Сравнивает столбцы
0
и 1
диапазона (например, столбцы D
и E
) и присваивает значение столбца D
обратно столбцу D
(это необходимо? ) и более высокое из двух значений в столбце E
Как изменить код?
Из вашего описания не совсем понятно, как заполнен столбец D и что вы хотите сделать со столбцом F, но дать общий совет:
- Если вы хотите, чтобы ваша функция работала на всех строках:
Измените ваш диапазон и разверните его до последнего ряда. Затем выполните цикл по всем строкам:
function onEdit() {
var sheet = SpreadsheetApp.getActiveSheet();
var lastRow = sheet.getLastRow();
var range = sheet.getRange("D2:E"+lastRow);
for (var i = 0; i < lastRow-1; i++){
var values = range.getValues()[i];
range.setValues([[values[0], Math.max(values[0], values[1])]]);
}
}
- Если вы хотите, чтобы код выполнялся только в текущей редактируемой строке: используйте объект события
e.range
, чтобы найти out, которая является отредактированной строкой и работает с этой строкой:
function onEdit(e) {
var sheet = SpreadsheetApp.getActiveSheet();
var range = e.range;
var row = range.getRow();
var values = sheet.getRange(row, 4, 1, 2).getValues()[0];
range.setValues([[values[0], Math.max(values[0], values[1])]]);
}
Примечание: getRange(row, 4, 1, 2)
- это обозначение для получения диапазона, начинающегося с определенной строки и столбца 4 (D
), 1 строка длиной и две колонки, см. здесь .
ВАЖНО: Если ваш лист заполняется автоматически с внешнего листа - триггер onEdit
не будет работать для вас (стреляет только в ручные, сделанные человеком правки). В этом случае вам потребуется обходной путь, как описано здесь .