Javascript 我可以动态更新Google表单列表框的内容吗

Javascript 我可以动态更新Google表单列表框的内容吗,javascript,google-apps-script,google-forms,Javascript,Google Apps Script,Google Forms,我有一个带有两个列表框(以及其他项)的表单。第二个列表框中的项目取决于第一个列表框中的选择。在pre-App脚本表单中,我使用描述的方法捕获表单参数,并将其嵌入到我自己的html和javascript中以处理依赖关系 我想转到新的基于应用程序脚本的表单。我知道我可以使用应用程序脚本从头开始编写表单。我的问题是,我是否可以使用电子表格中的forms界面创建表单,然后添加脚本来处理动态更新。特别是,如何获取listbox对象,以便添加onChange处理程序,从而更改另一个listbox对象的内容

我有一个带有两个列表框(以及其他项)的表单。第二个列表框中的项目取决于第一个列表框中的选择。在pre-App脚本表单中,我使用描述的方法捕获表单参数,并将其嵌入到我自己的html和javascript中以处理依赖关系

我想转到新的基于应用程序脚本的表单。我知道我可以使用应用程序脚本从头开始编写表单。我的问题是,我是否可以使用电子表格中的forms界面创建表单,然后添加脚本来处理动态更新。特别是,如何获取listbox对象,以便添加onChange处理程序,从而更改另一个listbox对象的内容


对于奖金积分,我想从电子表格的某个范围填充列表框内容,尽管这不是必需的

以下是除了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);
}

Apps脚本无法向Google表单添加任何交互性,因为它缺少合适的触发器。googleforms唯一可用的触发器是Open,其中Open的意思是“一个编辑器打开表单来修改它”(非常无用)。在用户点击“提交”之前,脚本不知道有人填写表单,然后就太迟了


谷歌表单中有一些基本的内置交互功能:你可以

除非我不明白你写了什么,否则这不会修改现有的Google表单,而是从头开始创建一个新表单。只有createForm函数才能创建表单。updateForm函数将根据需要对其进行更新。只需确保正确存储表单Id。问题的关键是根据“在第一个列表框中所做的选择”更改表单。此脚本不执行此操作,也无法执行此操作,因为“用户在表单上所做的选择”没有触发器。