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

时间:2014-05-05 02:33:44

标签: javascript google-apps-script google-form

我有一个包含两个列表框的表单(以及其他项目)。第二个列表框中的项目取决于在第一个列表框中所做的选择。在预应用程序脚本表单中,我使用了here描述的方法来捕获表单参数,并将其嵌入到我自己的html和javascript中以处理依赖项。

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

对于奖励积分,我希望从电子表格中的范围填充列表框内容,但这不是必需的。

2 个答案:

答案 0 :(得分:0)

Apps脚本无法为Google表单添加任何互动性,因为它缺少合适的触发器。 Google表单可用的唯一触发器是Open and Submit,其中Open表示"编辑器打开表单进行修改" (几乎没用)。该脚本不知道有人填写表单,直到用户点击"提交",然后为时已晚。

Google表单中存在一些基本的内置交互性:一个可以direct a user to a section based on their choice

答案 1 :(得分:-2)

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