Настройка таймера в Google Apps script

#google-apps-script #google-sheets

#google-apps-script #google-таблицы

Вопрос:

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

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

Ответ №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 часов ячейка будет заблокирована и, следовательно, ее больше нельзя / не следует редактировать. Итак, просто поместите часть удаления триггера (второй фрагмент кода) перед кодом создания триггера (первый фрагмент кода), и, предположительно, это сработает.

Комментарии:

1. Я вставил свой отредактированный скрипт в вопрос. Он не создает новый триггер, если редактирование внесено в течение 24 часов.

2. Этот код создает, а затем немедленно удаляет триггер. Попробуйте использовать только первый код моего ответа. Просто создайте только его и посмотрите, было ли оно создано.

3. На самом деле нет, я получаю сообщение об ошибке в строке 3: «Не удается прочитать диапазон свойств undefined»

4. Вы не запускаете функцию onEdit. Вы просто редактируете ячейку, и она запустится.

5. @user3447653 просто отредактируйте ячейку и посмотрите, работает ли она. Щелкните по списку триггеров проекта, чтобы увидеть, был ли создан триггер.