我有一个包含两个列表框的表单(以及其他项目)。第二个列表框中的项目取决于在第一个列表框中所做的选择。在预应用程序脚本表单中,我使用了here描述的方法来捕获表单参数,并将其嵌入到我自己的html和javascript中以处理依赖项。
我想转到基于App Script的新表单。我知道我可以使用App Script从头开始编写表单。我的问题是我是否可以使用电子表格中提供的表单界面创建表单,然后添加脚本来处理动态更新。特别是,我如何获取列表框对象,以便我可以添加onChange处理程序,这反过来会改变另一个列表框对象的内容?
对于奖励积分,我希望从电子表格中的范围填充列表框内容,但这不是必需的。
答案 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);
}