Проблема с защитой:
Класс защиты обычно используется для защиты диапазонов от редактирования. Однако это не подходит для вашей ситуации, поскольку, как указано здесь , пользователи, выполняющие сценарий, не могут удалить себя из списка редакторов:
Ни владелец электронную таблицу или текущего пользователя нельзя удалить.
Использование oldValue:
Из-за этого лучшим способом для go было бы использование параметра oldValue
из объект события onEdit .
Триггер onEdit
запускается каждый раз, когда пользователь редактирует ячейку. В нем вы можете использовать:
- PropertiesService для хранения полезной информации: (1) редактируется ли первый раз строка 1 (
isNotFirstTime
), и (2 ) когда в последний раз редактировалась первая строка (startTime
). - Объект события для получения информации об отредактированной ячейке (ее строка, ее старое значение и т. д. c.) .
Вы можете сделать что-то по следующим строкам (проверить комментарии):
function onEdit(e) {
var current = new Date(); // Current date
var range = e.range;
var editedRow = range.getRow();
var sheet = range.getSheet();
var props = PropertiesService.getScriptProperties();
var waitingTime = 20 * 1000; // 20 seconds
var isNotFirstTime = props.getProperty("isNotFirstTime"); // Check if first row was previously edited
var startTime = new Date(props.getProperty("startTime")); // Time when first row was first edited
if (editedRow === 1 && !isNotFirstTime) { // Check that (1) edited row is first one, (2) it was not edited before
props.setProperty("startTime", current.toString()); // If it's first time first row was edited, store current time
Utilities.sleep(waitingTime); // Wait for 20 seconds
props.setProperty("isNotFirstTime", true); // Store: first row was previously edited
}
// Check that (1) second row edited, (2) Less than 20 seconds passed since first time first row was edited:
if (editedRow === 2 && (current - startTime) < waitingTime) {
range.setValue(e.oldValue || ""); // Set previous value to edited cell (this avoids editing cells)
}
}
Ссылка: