Установить триггер для скрипта приложения Google в пользовательском дополнении - PullRequest
1 голос
/ 20 апреля 2020

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

Ниже приведена функция добавления на лист 1 триггера «при открытии» и 1 триггера «при редактировании».

function addTriggers() {

  var sheet = SpreadsheetApp.getActiveSheet();
  var triggers = ScriptApp.getUserTriggers(sheet);

  if(triggers.length!=2)//
  {
    ScriptApp.newTrigger('sheetOpen')
    .forSpreadsheet(sheet)
    .onEdit()
    .create();

    ScriptApp.newTrigger('sheetEdited')
    .forSpreadsheet(sheet)
    .onOpen()
    .create();     
  }

Затем я попытался установить эту функцию через onInstall();

function onInstall(e){
  addSpreadsheetEditTrigger(); 
  sheetOpen();
}

function sheetOpen()
{
//do something after the sheet is open;
}

function sheetEdited()
{
//do something when the sheet is edited by user;
}

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

Может кто-нибудь сообщить мне, где я сделал ошибку?

1 Ответ

1 голос
/ 20 апреля 2020

1. Как создать триггер вручную

Если вы хотите создать триггер для электронной таблицы, вам нужно указать в качестве параметра в forSpreadsheet() электронную таблицу , а не лист !

Итак:

var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
...

    ScriptApp.newTrigger('sheetOpen')
    .forSpreadsheet(spreadsheet)
    .onOpen()
    .create();
...

Похоже, что вы получили назначение функций 'sheetOpen' и 'sheetEdited' неправильно

Вы должны дважды проверить либо вам действительно нужно построить триггер вручную. Вместо этого вы можете вызвать уже существующий триггер onOpen (e) (если вам не нужен устанавливаемый).

Пример:

function onInstall(e){
  sheetOpen();
}
function onOpen(e){
  sheetOpen();
}
function sheetOpen()
{
//do something after the sheet is open;
}

ОБНОВЛЕНИЕ

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

Образец:

function onInstall(e) {
  onOpen(e); 
}
function onOpen(e) {
  var ui = SpreadsheetApp.getUi();
  ui.createMenu('MyAddOn Menu')
  .addItem('Please click here to get started', 'addTriggers')
  .addToUi();
}

function addTriggers() {
  ...
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...