Код ниже должен работать:
function onEdit(e) {
var s = SpreadsheetApp.getActiveSheet(); // the active sheet (no need to check if the sheet == sheet1 as the active sheet will always be the one that's being edited)
var r = e.range; // the range of the edited cell
var c = r.getColumn(); // the column of the range
var timeDelay = 5; // number in seconds
var checkbox = r.getValue(); // the value of the checkbox after being edited
var date = new Date(); // the date for the timestamp
if (c == 5 && checkbox == true) { // if the checkbox has been checked, change the color to red
var nextCell = r.offset(0,1);
Utilities.sleep(timeDelay * 1000); // Utilities.sleep takes a number in milliseconds
nextCell.setValue(date).setBackground("red");
} else if (c == 5 && checkbox == false) { // if the checkbox has been unchecked, change the color to green
var nextCell = r.offset(0,1);
nextCell.setValue(date).setBackground("green");
}
}
Я сделал несколько ваших изменений, некоторые из них являются просто личным предпочтением того, что, на мой взгляд, более читабельно в долгосрочной перспективе, если вы добавите больше кода (т.е. объявите дату заранее, установив все свои переменные в начать и т. д.).
Однако, это определенно излишне, так как активный лист все равно вернет правильную вещь:
if (s.getName() == "Sheet1")
Я также изменил setFontColor () на setBackground (), так как это звучало так, как вы и хотели из своего описания, и подумали, что вы можете не знать о функции, хотя вы, конечно, можете изменить ее обратно на setFontColor () без каких-либо проблем. ,
Я также добавил время задержки, о котором вы спрашивали, хотя я не уверен, зачем вам это нужно в этом контексте. Если это не то, о чем вы говорили, не стесняйтесь удалить эти две строки, а остальная часть кода будет работать нормально:
var timeDelay = 5; // number in seconds
и
Utilities.sleep(timeDelay * 1000);