Как заставить триггер Google script срабатывать автоматически (работает вручную) при создании новой папки - PullRequest
0 голосов
/ 12 июня 2019

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

function createNewFolder() {

    // identify the sheet where the data resides 
    var ss = SpreadsheetApp.getActive();
    var names = ss.getSheetByName("Form Responses 1");
    var ids = ss.getSheetByName("Form Responses 1");

    //identify the cell that will be used to name the folder  
    var getName = names.getRange(names.getLastRow(), 3).getValue();

    //identify the cell that determines which parent folder to use
    var folderId = ids.getRange(ids.getLastRow(), 5).getValue();

    //identify the parent folder the new folder will be in 
    var parentFolder = DriveApp.getFolderById(folderId);

    //create the new folder 
    var newFolder = parentFolder.createFolder(getName);

}

Триггер не срабатывает около 85% времени и настроен на срабатывание при регистрации нового ответа формы в соответствующей электронной таблице.

Ответы [ 2 ]

0 голосов
/ 12 июня 2019

Попробуйте заменить функцию onFormSubmit следующим образом:

Эта функция должна быть создана в электронной таблице со связанными листами. Эта функция использует данные, которые отправляются в форме события отправки объекта. Не забудьте включить 'e' в функцию в качестве параметра.

function createNewFolder(e) {
  var parentFolder = DriveApp.getFolderById(e.values[4]);
  var newFolder = parentFolder.createFolder(e.values[2]);
}

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

0 голосов
/ 12 июня 2019

Скорее всего, это асинхронная проблема. Функция parentFolder.createFolder, вероятно, вызывается до того, как parentFolder завершит выборку данных из DriveApp. Попробуйте это:

var newFolder = parentFolder.then(() => {
    parentFolder.createFolder(getName)
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...