Копирование шаблона Google таблицы с триггерами на GAS

Вопрос или проблема

У меня есть таблица Google, которую я создал, и хочу сделать несколько экземпляров. Эти копии будут созданы конечными пользователями (другими аккаунтами Google) следующим образом.

Я использую выпадающие списки, которые, с помощью триггера on edit, запускают разные скрипты в библиотеках, один из которых копирует таблицу в желаемую папку. Мне удалось сделать это и даже скопировать диапазоны защиты (что занимает много времени), но я совершенно не смог добавить тот же триггер редактирования в вновь скопированный файл.

Более того, когда я прошу других пользователей добавить триггер редактирования, функции не работают должным образом из-за ограничений – то есть некоторые листы, которые использует функция, не предназначены для просмотра конечными пользователями. Мне нужно будет предоставить пользователю, который создает триггер, права на просмотр и даже редактирование чувствительных листов (которые должны оставаться конфиденциальными) в зависимости от запущенной функции.

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

Ответ или решение

Для решения задачи копирования шаблона Google Sheet с триггерами Google Apps Script (GAS), важно учесть несколько аспектов, которые позволят вам эффективно управлять правами доступа и триггерами в скриптах.

1. Создание копий таблицы

Первый шаг в вашей задаче заключается в том, чтобы пользователи могли создавать копии исходного шаблона. Для этого можно использовать метод SpreadsheetApp.copy() для создания копии таблицы. Однако для того чтобы создать триггеры на новом файле, необходимо немного изменить подход.

2. Использование триггеров

К сожалению, Google Apps Script не позволяет напрямую добавлять триггеры к таблице от имени другого пользователя. Однако возможно использовать методы, позволяющие работать с триггерами на уровне вашей учетной записи.

Вот пример кода, который поможет создать копию вашего шаблона и добавить на него триггеры:

function copyTemplate() {
  var templateFileId = 'ID_ВАШЕГО_ШАБЛОНА'; // ID шаблонной таблицы
  var folderId = 'ID_ПАПКИ'; // ID папки, где будут сохраняться копии

  // Копируем шаблон
  var templateFile = DriveApp.getFileById(templateFileId);
  var newFile = templateFile.makeCopy('Копия от ' + new Date(), DriveApp.getFolderById(folderId));

  // Создаем триггер для нового файла
  ScriptApp.newTrigger('yourFunction') // Замените 'yourFunction' на название вашей функции
      .forSpreadsheet(newFile.getId())
      .onEdit()
      .create();

  Logger.log('Копия создана и триггер добавлен: ' + newFile.getUrl());
}

function yourFunction(e) {
  // Ваш код для обработки события 'onEdit'
}

3. Защита данных

Чтобы избежать ситуации, когда конечные пользователи получают доступ к защищенным данным, может быть полезным использовать подход, при котором ваши скрипты взаимодействуют с данными через API или отдельные таблицы. Это обеспечит уровень защиты, необходимый для предотвращения несанкционированного доступа к информации.

4. Предоставление прав

При создании копий таблиц и добавлении к ним триггеров вам возможно придется проверить права доступа. Если в определённых функциях используются данные из защищённых листов, убедитесь, что все необходимые разрешения предоставлены заранее через раздел "Share" в Google Sheets.

5. Обработка ошибок и тестирование

Обязательно протестируйте систему в различных сценариях использования. Учёт такие факторы, как:

  • Пользовательское взаимодействие (нажатия и редактирование ячеек).
  • Возможные сценарии ошибок при создании триггеров.

Использование try-catch блоков поможет отлавливать ошибки и делать ваш скрипт более устойчивым.

Заключение

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

Если у вас возникли дополнительные вопросы, всегда можно обратиться к сообществам разработчиков Google или документации по Google Apps Script для получения более детальной информации.

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

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