1

Итак, у меня есть электронная таблица Google, которая постоянно обновляется скриптом под названием «writeToSheet» (это работает отлично). Это записывает новую строку в конце таблицы, последний столбец которой является датой.onEdit триггерные скрипты Google не работают

У меня также есть второй скрипт с функцией «writeToCal», которая берет некоторые данные из этой новой строки в электронной таблице и создает событие календаря Google в дату, указанную в столбце, упомянутом выше.

Проблема возникает, когда я пытаюсь вызвать «writeToCal», так что «writeToCal» выполняется всякий раз, когда электронная таблица обновляется. Я пробовал простые триггеры и устанавливаемые триггеры, но, похоже, не работает для меня. (https://developers.google.com/apps-script/guides/triggers/installable)

Код работает (т. Е. Создает событие календаря), когда я запускаю его из диспетчера сценариев в электронной таблице Google, но я хочу, чтобы он запускался автоматически каждый раз, когда электронная таблица обновляется. Поскольку сценарий отлично работает, когда я запускаю его, я считаю, что это вопрос запуска, но я не могу понять, в чем проблема. Любая помощь будет высоко ценится

Мой код выглядит следующим образом, этот сценарий связан с таблицей в вопросе:

**function triggerWhyDoYouCallMeDave() { 
    var ss = SpreadsheetApp.openById("BlahBlah"); 
    ScriptApp.newTrigger('writeToCal') 
    .forSpreadsheet(ss) 
    .onEdit() 
    .create(); 
} 

function writeToCal(e) {  
    var ss= SpreadsheetApp.openById("BlahBlah"); 
    var tt = ss.setActiveSheet(ss.getSheets()[0]); 

    var lastRow = tt.getLastRow(); 
    var lastColumn = tt.getLastColumn(); 

    //Title is from the User and the follow up message 
    var userCell = tt.getRange(lastRow, 2); 
    var usr = userCell.getValue(); 

    var followUpCell = tt.getRange(lastRow, 8); 
    var follUp = followUpCell.getValue(); 

var target = tt.getRange(lastRow, 6); 
    var targetName = target.getValue(); 

    var title = (usr+": "+follUp+" with "+targetName); 

    //Get the date from the follow up date. 
    var dateCell = tt.getRange(lastRow, 9); 
    var follUpDate = new Date(dateCell.getValue()); 

    var calendar =  CalendarApp.getCalendarById('BlahBlah'); 
    calendar.createAllDayEvent(title, follUpDate); 

}** 
+0

Вы редактируете свой лист вручную или используете только другой скрипт, который вы упомянули? –

+0

Лист редактируется другим скриптом. – AnPocArBuile

ответ

1

Вам не нужно использовать триггер onEdit если лист изменяется только с помощью другой скрипт, вы можете просто вызвать свою функцию writeToCal() непосредственно из другой функции, добавьте SpredsheetApp.flush() перед тем, как позвонить ему, чтобы убедиться, что все изменения записаны должным образом.

+0

Это сработало отлично. Спасибо за вашу помощь. Меня все еще раздражает, что триггер фактически не срабатывает, но я думаю, что это уже не проблема. – AnPocArBuile

Смежные вопросы