GSheets onEdit() не срабатывает для редакторов, кроме владельца – в чем причина?

Вопросы и ответы

Я создал простую таблицу Google для подсчета проезжающих транспортных средств по категориям с функцией onEdit, которая вставляет текущее время и дату в колонку A, когда чекбокс в колонке B по H отмечается.

Это работает хорошо, когда я использую таблицу, но когда мой сын редактирует, галочки появляются, но дата и время не вводятся в колонку A. Проблема сохраняется на трех разных устройствах. У доступа моего сына к редактору должно быть все в порядке, чтобы он мог активировать чекбокс, так почему это не вызывает функцию onEdit?

Большое спасибо всем, кто может помочь!

Ответ

Проблема, с которой вы столкнулись, связана с ограничениями выполнения триггеров в Google Apps Script, а именно с тем, что триггеры, такие как onEdit(), работают по-разному для владельца документа и для других редакторов.

Причины:

  1. Пользовательские триггеры vs. простые триггеры:

    • onEdit() является простым триггером, который запускается от имени текущего пользователя, который редактирует документ. Если ваш сын редактирует таблицу, триггер будет выполняться от его имени, и он не сможет выполнять действия, требующие авторизации (например, запись данных в другие ячейки, если не будут выполнены соответствующие условия).
    • Если скрипт требует авторизации, он не будет выполняться для пользователей, равно как и не будет записывать данные от их имени.
  2. Разрешения:
    • Убедитесь, что ваш сын имеет разрешение редактирования для таблицы, но это также не всегда означает, что он сможет выполнять скрипты, которые требуют дополнительных разрешений.

Решение:

Для того чтобы ваш триггер работал для всех редакторов, вам нужно преобразовать его в установленный триггер:

  1. Создание проектa Apps Script:

    • В Google Sheets перейдите в меню: Расширения > Apps Script.
    • Это откроет среду разработки Apps Script.
  2. Настройка вашего скрипта:

    • Убедитесь, что ваш скрипт, содержащий функцию onEdit, выглядит корректно. Пример:
    function onEdit(e) {
       var sheet = e.source.getActiveSheet();
       var range = e.range;
    
       // Убедитесь, что редактирование происходит в нужных столбцах
       if (range.getColumn() >= 2 && range.getColumn() <= 8 && range.getValue() === true) {
           var row = range.getRow();
           sheet.getRange(row, 1).setValue(new Date()); // Поставить текущую дату/время в столбец A
       }
    }
  3. Создание установленного триггера:

    • Перейдите в меню "Триггеры" (значок часов в левой панели).
    • Нажмите на кнопку "Добавить триггер" (значок плюса).
    • Выберите функцию onEdit, установите тип триггера как "При редактировании" и сохраните.
  4. Предоставление разрешений:
    • При создании установленного триггера вам будет предложено подтвердить разрешения. Убедитесь, что вы и ваши редакторы предоставили необходимые разрешения для работы скрипта.

Проверка:

После выполнения этих шагов ваш сын сможет редактировать таблицу, и триггер onEdit будет срабатывать корректно, добавляя дату и время в столбец A при активации чекбоксов в столбцах B-H.

Итог:

Использование установленного триггера позволит вашему скрипту работать для всех редакторов, а не только для владельца. Если у вас возникнут дополнительные вопросы или потребуется помощь, не стесняйтесь спрашивать!

Оцените материал
Добавить комментарий

Капча загружается...