Как динамически изменять значение существующего текстового элемента в Google Forms с помощью скрипта Google Apps

У меня есть форма Google, в которой есть TextItem с заголовком "В каком месте это было выполнено?".

Каждый раз, когда форма загружается (открывается), мне нужно установить значение местоположения (loc) для этого существующего текстового поля и показать его пользователю.

function populateMemberIds(loc){
    var form = FormApp.openById(formUrl);
    var questions = form.getItems();
    for (var i=0; i<questions.length; i++){
       if(questions[i].getTitle()=="Which location was this performed at?"){
       var textItem = questions[i].asTextItem();
       //I get stuck here
    }

}

Я уже настроил триггер openForm, который позволяет запускать функцию populateMemberIds при каждой загрузке формы. Опять же, мне нужно изменить значение раздела "Ваш ответ" текстового элемента на значение местоположения (loc).

Буду признателен за любую помощь.

2 ответа

Решение

Вы не можете изменить ответ формы, заполненный пользователем, вы можете создать ответ формы программно или отредактировать ответ после его отправки. Триггер формы onOpen запускается, когда кто-то открывает форму для ее редактирования, а не для ответа [1]:

Это событие происходит не тогда, когда пользователь открывает форму для ответа, а когда редактор открывает форму для ее изменения.

Более того, триггерные функции поставляются с уже определенным параметром события [1], поэтому вы не можете установить свои собственные параметры функции, как вы делаете с вашим loc параметр.

РЕДАКТИРОВАТЬ

Вы можете программно создать и отправить ответ формы [2], из которого вы также можете получить URL-адрес с предварительно заполненной формой для заполнения пользователем [3].

function populateMemberIds(loc){
  var form = FormApp.openById("[FORM-ID]");
  var questions = form.getItems();
  var response = form.createResponse(); 

  for (var i=0; i<questions.length; i++){
    if(questions[i].getTitle()=="title form"){//Which location was this performed at?"){
      var textItem = questions[i].asTextItem();
      var itemResponse = textItem.createResponse(loc) ;
      response.withItemResponse(itemResponse);
    }
  }
  //Submit programmatically the form response
  response.submit();
  //URL with prefilled form response
  Logger.log(response.toPrefilledUrl()); 
}

function test () {
  populateMemberIds("US");
}

[1] https://developers.google.com/apps-script/guides/triggers/events

[2] https://developers.google.com/apps-script/reference/forms/form-response

[3] https://developers.google.com/apps-script/reference/forms/form-response

Триггеры onOpen Google Apps Script (простые и устанавливаемые) для Google Forms выполняются только при открытии формы в редакторе форм, а не при открытии формы с использованием ссылок просмотра / редактирования ответа.

Есть два способа "предварительно заполнить" ответ Google Forms:

  1. Используйте предварительно заполненный URL-адрес ответа
  2. Создайте ответ программно, затем используйте editResponseUrl

связанные с

Другие вопросы по тегам