Я создал простую таблицу Google для подсчета проезжающих транспортных средств по категориям с функцией onEdit, которая вставляет текущее время и дату в колонку A, когда чекбокс в колонке B по H отмечается.
Это работает хорошо, когда я использую таблицу, но когда мой сын редактирует, галочки появляются, но дата и время не вводятся в колонку A. Проблема сохраняется на трех разных устройствах. У доступа моего сына к редактору должно быть все в порядке, чтобы он мог активировать чекбокс, так почему это не вызывает функцию onEdit?
Большое спасибо всем, кто может помочь!
Ответ
Проблема, с которой вы столкнулись, связана с ограничениями выполнения триггеров в Google Apps Script, а именно с тем, что триггеры, такие как onEdit(), работают по-разному для владельца документа и для других редакторов.
Причины:
-
Пользовательские триггеры vs. простые триггеры:
- onEdit() является простым триггером, который запускается от имени текущего пользователя, который редактирует документ. Если ваш сын редактирует таблицу, триггер будет выполняться от его имени, и он не сможет выполнять действия, требующие авторизации (например, запись данных в другие ячейки, если не будут выполнены соответствующие условия).
- Если скрипт требует авторизации, он не будет выполняться для пользователей, равно как и не будет записывать данные от их имени.
- Разрешения:
- Убедитесь, что ваш сын имеет разрешение редактирования для таблицы, но это также не всегда означает, что он сможет выполнять скрипты, которые требуют дополнительных разрешений.
Решение:
Для того чтобы ваш триггер работал для всех редакторов, вам нужно преобразовать его в установленный триггер:
-
Создание проектa Apps Script:
- В Google Sheets перейдите в меню:
Расширения
>Apps Script
. - Это откроет среду разработки Apps Script.
- В Google Sheets перейдите в меню:
-
Настройка вашего скрипта:
- Убедитесь, что ваш скрипт, содержащий функцию 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 } }
-
Создание установленного триггера:
- Перейдите в меню "Триггеры" (значок часов в левой панели).
- Нажмите на кнопку "Добавить триггер" (значок плюса).
- Выберите функцию
onEdit
, установите тип триггера как "При редактировании" и сохраните.
- Предоставление разрешений:
- При создании установленного триггера вам будет предложено подтвердить разрешения. Убедитесь, что вы и ваши редакторы предоставили необходимые разрешения для работы скрипта.
Проверка:
После выполнения этих шагов ваш сын сможет редактировать таблицу, и триггер onEdit будет срабатывать корректно, добавляя дату и время в столбец A при активации чекбоксов в столбцах B-H.
Итог:
Использование установленного триггера позволит вашему скрипту работать для всех редакторов, а не только для владельца. Если у вас возникнут дополнительные вопросы или потребуется помощь, не стесняйтесь спрашивать!