Настройте таймер в скрипте приложений Google

Я пытаюсь настроить таймер на 24 часа, когда ячейка редактируется в листах. Если она не редактировалась в течение 24 часов, эта строка должна быть заблокирована; в противном случае таймер необходимо сбросить на 24 часа, если он редактируется до 24 часов. Новое в программировании сценариев приложений Google; Мы ценим любые предложения

function onEdit(e) {

var range = e.range;
range.setNote('Last modified: ' + new Date());
ScriptApp.newTrigger("functionToLockCells").timeBased().after(24 * 60 *60 * 1000).create()

var triggers = ScriptApp.getProjectTriggers();
for (var i = 0; i < triggers.length; i++) {
  if (   triggers[i].getHandlerFunction() == "functionToLockCells") {
  ScriptApp.deleteTrigger(triggers[i]);
}}
}

function functionToLockCells() {
  //First cell to lock
  var col = 1;
  // Get last row with data in sheet
  var lastRow = sheet.getLastRow();
  //Loop until last row in sheet is passed
  lockRange(lastRow, col);
}

person user3447653    schedule 17.08.2020    source источник


Ответы (1)


Вы можете добавить в свою функцию onEdit() код, который создает запланированный одноразовый триггер для выполнения функции, которая блокирует ваши ячейки через 24 часа после редактирования ячейки.

ScriptApp.newTrigger("functionToLockCells")
.timeBased()
.after(24 * 60 *60 * 1000)
.create()
}

Если эта ячейка редактируется в течение 24 часов, вы можете удалить этот триггер, используя этот код:

var triggers = ScriptApp.getProjectTriggers();
for (var i = 0; i < triggers.length; i++) {
  if (   triggers[i].getHandlerFunction() == "functionToLockCells") {
    ScriptApp.deleteTrigger(triggers[i]);
  }}

и создайте новый, снова используя первый фрагмент кода в этом ответе.

Процесс может быть следующим: при редактировании интересующей ячейки удалить активный триггер и создать новый, который будет выполнять функцию через 24 часа. Если прошло 24 часа, ячейка будет заблокирована, и поэтому ее больше нельзя/не следует редактировать. Так что просто поместите часть удаления триггера (второй фрагмент кода) перед кодом создания триггера (первый фрагмент кода), и это, вероятно, сработает.

person soMario    schedule 17.08.2020
comment
Я вставил свой отредактированный сценарий в вопрос. Он не создает новый триггер, если редактирование производится в течение 24 часов. - person user3447653; 17.08.2020
comment
Этот код создает, а затем сразу же удаляет триггер. Попробуйте только первый код моего ответа. Просто создайте его и посмотрите, был ли он создан. - person soMario; 17.08.2020
comment
На самом деле нет, я получаю сообщение об ошибке в строке 3: Невозможно прочитать диапазон свойств неопределенного - person user3447653; 17.08.2020
comment
Вы не запускаете функцию onEdit. Вы просто редактируете ячейку, и она запустится. - person soMario; 17.08.2020
comment
@ user3447653 просто отредактируйте ячейку и посмотрите, работает ли она. Нажмите на список триггеров проекта, чтобы увидеть, был ли создан триггер. - person soMario; 17.08.2020
comment
Но, как я уже сказал, удалите часть, которая удаляет триггер, сразу после его создания. Тогда результирующий список триггеров будет пуст. - person soMario; 17.08.2020
comment
Да, первая часть работает. Не могли бы вы указать мне, где должен быть размещен второй фрагмент кода? - person user3447653; 17.08.2020