#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
}