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