Google apps script 使用应用程序脚本动态编辑live Google表单中的多项选择选项
我是洛杉矶的一名高中教师,试图使用应用程序脚本创建一个课程注册系统。我需要用于此注册的谷歌表单: 问题1)根据学生当前的回答选择,更新新页面上后续多项选择题中可用的选项 问题2)当多项选择选项达到其“上限”时,从表格中删除选项 问题1(示例) 一名学生在车间1中注册“打领带”,并进入新页面。脚本根据学生的第一选择编辑新页面上的可用选项,并从新页面上的可能选项列表中删除“领带”,因此“礼仪”是他们唯一剩下的选项 问题2(示例) 学生可以注册“打领带”或“礼仪”,这两种回答最初都可以在谷歌表格中找到。30名学生参加了这项调查,所有30名学生都参加了“打领带”研讨会。应用程序脚本引用了响应电子表格,意识到“搭售”研讨会已满,然后将其从谷歌表单的可能选择列表中删除。学生31去注册,他们唯一的选择就是“礼仪”Google apps script 使用应用程序脚本动态编辑live Google表单中的多项选择选项,google-apps-script,google-forms,Google Apps Script,Google Forms,我是洛杉矶的一名高中教师,试图使用应用程序脚本创建一个课程注册系统。我需要用于此注册的谷歌表单: 问题1)根据学生当前的回答选择,更新新页面上后续多项选择题中可用的选项 问题2)当多项选择选项达到其“上限”时,从表格中删除选项 问题1(示例) 一名学生在车间1中注册“打领带”,并进入新页面。脚本根据学生的第一选择编辑新页面上的可用选项,并从新页面上的可能选项列表中删除“领带”,因此“礼仪”是他们唯一剩下的选项 问题2(示例) 学生可以注册“打领带”或“礼仪”,这两种回答最初都可以在谷歌表格中找到
如果我的问题已经被问到并回答了(相信我,我确实搜索过!),我将非常感谢重新定向。我相信我们可以轻松实现您的第二个目标,并根据当前的响应状态修改表单 方法是
function updateForm(e) {
if (e.values[1] == 'Yes') {
Logger.log('Yes');
var existingForm = FormApp.openById('1jYHXD0TBYoKoRUI1mhY4j....yLWGE2vAm_Ux7Twk61c');
Logger.log(existingForm);
var item = existingForm.addMultipleChoiceItem();
item.setTitle('Do you prefer cats or dogs?')
.setChoices([
item.createChoice('Cats'),
item.createChoice('Dogs')
])
.showOtherOption(true);
}
}
当涉及到实现第一个问题中的目标时,它更加微妙,因为表格不会中途提交。可以根据对多项选择题的不同回答转到不同的页面,您的用例可能适合这种方法,尽管它不是非常动态的
此外,还可以使用html服务来创建完全动态的体验
如果您需要进一步的信息,请告诉我。您无法使用Google Forms服务创建这种类型的动态表单,因为在表单输入期间,除了表单提交时,服务与脚本之间没有交互。在多页表单的情况下,脚本无法知道学生已完成一页并转到另一页
不过,您可以使用HtmlService或UiService来实现这一点。在这两种情况下,您都需要依靠客户端表单通过服务器端脚本进行交互,以获得课程选项的更新列表,然后修改下一个“页面”。这将是一个复杂的问题。此问题的另一个答案将在每次提交表单时不断添加多选项选择。采用类似的方法:
function updateForm(){
var form = FormApp.openById('YOUR_FORM_ID'); // Base form
// need to read what dates are available and which are taken
var doc = SpreadsheetApp.getActiveSpreadsheet();
var dates = doc.getRange("dates!A1:A10").getValues(); //available options
var taken_dates = doc.getRange("responses!F2:F51").getValues(); //just getting first 50 responses
// joining the taken dates into one string instead of an array to compare easier
var taken_dates_string = taken_dates.join("|");
var choice = [];
// loop through our available dates
for (d in dates){
// test if date still available
if (dates[d][0] != "" && taken_dates_string.indexOf(dates[d][0]) === -1){
choice.push(dates[d][0]); // if so we add to temp array
}
}
var formItems = form.getItems(FormApp.ItemType.LIST); // our form list items
// assumption that first select list is the one you want to change
// and we just rewrite all the options to ones that are free
formItems[0].asListItem().setChoiceValues(choice);
}
更新Submit上的选项并不保证保持在上限之下,但在某些情况下可能已经足够好了。