我有一个包含两个列表框的表单(以及其他项目)。第二个列表框中的项取决于第一个列表框中所做的选择。在pre-App Script表单中,我使用描述的方法here来捕获表单参数,并将其嵌入到我自己的html和javascript中来处理依赖关系。
我想转到新的基于应用脚本的表单。我知道我可以使用App Script从头开始编写表单。我的问题是,是否可以使用电子表格中的forms界面创建一个表单,然后添加一个脚本来处理动态更新。具体地说,如何获取列表框对象,以便添加onChange处理程序,该处理程序反过来会更改其他列表框对象的内容?
为了获得奖励,我想从电子表格的一个范围中填充列表框内容,尽管这不是必需的。
发布于 2017-11-25 00:51:18
应用程序脚本无法向Google表单添加任何交互性,因为它缺少合适的触发器。谷歌表单唯一可用的触发器是Open and Submit,它的意思是“编辑器打开表单来修改它”(几乎没有用)。在用户点击“提交”之前,脚本不知道有人填写了表单,然后就太迟了。
在Google Forms中有一些基本的内置交互性:一个可以direct a user to a section based on their choice。
发布于 2014-05-07 11:39:43
除了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);
}
https://stackoverflow.com/questions/23463948
复制