Мой триггер onOpen запускает только половину сценария

#google-apps-script #google-sheets

#google-apps-script #google-sheets

Вопрос:

Мой скрипт onOpen запускает только половину скрипта. Когда я пытаюсь запустить scrip вручную, он работает, но когда я обновляю электронную таблицу, в ячейке A10 меняется только число на 5.

  function onOpen() {
const ss = SpreadsheetApp.getActive();
  const rok = ss.getSheetByName('ROK');
  const id = ss.getSheetByName('ID');
  const kontrola = rok.getRange('I4').getValue();
   ss.getSheetByName('DATA').getRange('A10').setValue(5)
  
  if (kontrola == 1) {
  //iGV synergie copy
    const term = rok.getRange('G3').getValue();
    const name = ('iGV' term);
    const Synergie = id.getRange('C5').getValue();
    const iGVSarchiveid = id.getRange('C3').getValue();
    const iGVSarchive = DriveApp.getFolderById(iGVSarchiveid);
    const iGVS = DriveApp.getFolderById(Synergie).getFilesByName('iGVxFamp;L');
    const copyiGVS = iGVS.next().makeCopy(name);
    const urlcopyiGVS = copyiGVS.getUrl();
    DriveApp.getFilesByName(name).next().moveTo(iGVSarchive);
    ss.getSheetByName('DATA').getRange('J3').setValue(urlcopyiGVS)
  }
}
  

Ответ №1:

Проблема:

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

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

По сути, простой триггер не может получить доступ DriveApp , поскольку для этого требуется авторизация.


Решение:

Вместо этого создайте устанавливаемый onOpen триггер. Переименуйте свою функцию и используйте любое имя, кроме onOpen , а затем перейдите к триггерам вашего текущего проекта и создайте устанавливаемый триггер для вашей функции (в моем примере myFunction ):

  function myFunction() {
// code goes here
}
  

пример