Как ускорить копирование / создание файла в Google Apps Script много раз? - PullRequest
0 голосов
/ 26 мая 2019

Итак, я устанавливаю опросы студентов в колледже. Есть много форм для раздачи многим группам студентов. Для одного конкретного опроса у меня есть шаблон формы Google.

То, что я делаю, - это цикл, который на каждой итерации создает копию этого шаблона, а затем немного его модифицирует. Это занимает много времени. Google копирует и изменяет 220 форм в течение 40-50 минут. Я нашел способ обойти ограничение по времени, установленное для скрипта Google, но это все еще слишком долго. Вы видите какой-нибудь способ немного ускорить это?

Теперь это схематично выглядит так:

for(some range):{
   template.makeCopy("template", formsFolder);      
   var formFile = formsFolder.getFilesByName("template").next();
   var form = FormApp.openById(formFile.getId())
//   ... do some modifications
  }

Спасибо!

Ответы [ 2 ]

1 голос
/ 28 мая 2019

File#makeCopy уже вручает вам именно тот файл, который вы хотите, так что вы можете полностью исключить необходимость поиска файла, который вы создаете:

for (var f = 0; f < newNames.length; ++f) {
  var formFile = template.makeCopy(newNames[f], formsFolder);
  var form = FormApp.openById(formFile.getId());
  // Do stuff
}
0 голосов
/ 26 мая 2019

Я удивлен, что ваш сценарий фактически завершается и не имеет тайм-аута, поскольку максимальное время выполнения сценария составляет 30 минут или около того, в зависимости от вашего издания .У меня было очень похожее препятствие, когда мне нужно было запустить скрипт на 200-300 разных листах и ​​скопировать данные.Количество обращений к API составляло около 3-5 в цикле, а затем был какой-то javascript для фильтрации этого набора данных перед записью на лист.Он будет регулярно терпеть неудачу.

Я обнаружил, что мой лучший подход - использовать триггеры, а не обрабатывать одновременно 300 листов, а обрабатывать 100 листов каждые 5 минут или около того.В моих обстоятельствах действительно не было никаких причин, по которым эти листы нужно было обрабатывать в одно и то же время, если мои параметры фильтрации были точными.Я бы контролировал все параметры через входы на листе.

...