Могу ли я динамически обновлять содержимое списка Google Forms

У меня есть форма с двумя списками (среди прочего). Элементы во втором списке зависят от выбора, сделанного в первом списке. В формах, предшествующих App Script, я использовал метод, описанный здесь для захвата параметров формы и встраивания их в мой собственный html и javascript для обработки зависимости.

Я хотел бы перейти к новым формам на основе App Script. Я знаю, что могу написать форму с нуля, используя App Script. Мой вопрос заключается в том, могу ли я создать форму, используя интерфейс форм, доступный из электронной таблицы, а затем добавить скрипт для обработки динамического обновления. В частности, как мне получить объекты списка, чтобы я мог добавить обработчик onChange, который, в свою очередь, изменит содержимое другого объекта списка?

И для бонусного кредита я хотел бы заполнить содержимое списка из диапазона в электронной таблице, хотя это не обязательно.


person Llaves    schedule 05.05.2014    source источник


Ответы (2)


Сценарий приложений не может добавить интерактивности в форму Google, поскольку в нем отсутствуют подходящие триггеры. Для Google Форм доступны только следующие триггеры: Открыть и отправить, где «Открыть» означает «редактор открывает форму, чтобы изменить ее» (практически бесполезно). Сценарий ничего не знает о том, что кто-то заполняет форму, пока пользователь не нажмет «Отправить», а потом уже слишком поздно.

В Google Forms есть некоторые элементарные встроенные интерактивные функции: можно направить пользователя на раздел, основанный на их выборе.

person Community    schedule 25.11.2017

Вот все, что вам нужно, кроме триггера для события onChange. Вы можете сделать это с помощью триггера довольно легко.

//bonus, gets values from first column of spreadsheet and returns them
function getValues() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheets()[0];
  var lastRow = sheet.getLastRow();
  var range = sheet.getRange(1, 1, lastRow);
  var values = range.getValues();

  return values;
}

//what you'll need to call initially to create the form, and store id in project properties
function createForm() {
  var values = getValues();
  var form = FormApp.create('Test Form');
  var list = form.addListItem();
  var listItems = list.setChoiceValues(values);
  var formId = form.getId();

  PropertiesService.getScriptProperties().setProperty('formId', formId);
}

//use this to update on change event. Trigger can be created for this.
function updateForm() {
  var values = getValues();
  var formId = PropertiesService.getScriptProperties().getProperty('formId');
  var form = FormApp.openById(formId);
  var list = form.getItems(FormApp.ItemType.LIST)[0];
  var listItems = list.asListItem().setChoiceValues(values);
}
person Stan    schedule 07.05.2014
comment
если я не понимаю, что вы написали, это не изменяет существующую форму Google, а создает новую форму с нуля. - person Llaves; 08.05.2014
comment
только функция createForm создает форму. функция updateForm будет обновлять его по мере необходимости. Просто убедитесь, что вы правильно сохранили идентификатор формы. - person Stan; 04.06.2014
comment
Суть вопроса заключалась в том, чтобы изменить форму на основе выбора, сделанного в первом списке. Этот скрипт этого не делает и не может сделать, потому что нет триггера для того, чтобы пользователь сделал выбор в форме. - person ; 25.11.2017