我已经搜索了许多其他答案,但还没有完全找到解决方案。我有一个 Google 表单,客户每周都用它来注册志愿者点。我们填写一年中的所有周,以便客户可以浏览并注册他们感兴趣的各个周。寻找一个脚本,可以引用链接的 Google 表格中的答案来更改表单上的问题。>
如果我们有
在谷歌表单的选项列表中(我们的上限是 6 人注册),如果 4 月 10 日有 4 人,4 月 17 日有 6 人,4 月 24 日有 1 人,脚本将从中删除 4 月 17 日的问题谷歌表格。我在 Google 表格上有一个计数论坛,用于汇总每天注册的总人数,因此它是列表中每个相应日期的单个参考单元格的简单范围。
答案 0 :(得分:0)
脚本应如下所示:
var ssID = '1kmVW8fbHnRIwcJawPlTJ-hWHNnMuVovtqbsCinTKTKw';
var formID = '1z5kPkGAg9e7K7T5NMKBfa9J9mmx6hNVBBjL5hwPcOOo';
var wsData = SpreadsheetApp.openById(ssID).getSheetByName("data");
var form = FormApp.openById(formID);
var options = ["1 person", "2 person", "3 person", "4 person"];
function main() {
// get list of responses directly from form instead of sheets
var formResponses = form.getResponses();
// get list of date questions
var dates = wsData.getRange(2, 1, wsData.getLastRow(), 1).getValues().flat().filter(Boolean);
var counts = {};
for (var i = 0; i < formResponses.length; i++) {
var formResponse = formResponses[i];
var itemResponses = formResponse.getItemResponses();
for (var j = 0; j < itemResponses.length; j++) {
var itemResponse = itemResponses[j];
var question = itemResponse.getItem().getTitle();
// count only answers for date questions
if (dates.includes(question)) {
var answer = parseInt(itemResponse.getResponse().replace(' person',''));
counts[question] = counts[question] ? counts[question] + answer : answer;
}
}
}
// get list of questions
var items = form.getItems();
var titles = items.map(function (item) {
return item.getTitle();
});
dates = dates.forEach(function (date, index){
// get position of each date question
var pos = titles.indexOf(date)
if (pos !== -1) {
// get id
var item = items[pos];
var itemID = item.getId();
var item = form.getItemById(itemID);
// count remaining slots
var slots = 6 - counts[date];
// if all slots are already used, remove question
if(slots == 0) {
form.deleteItem(item);
}
else {
// set new options up to remaining slots
var newOptions = options.slice(0, slots);
item.asListItem().setChoiceValues(newOptions);
}
// assign slots used in sheets
wsData.getRange(index + 2, 2).setValue(counts[date]);
}
});
}
onFormSubmit
安装 main
触发器getResponses
而不是阅读回复表来读取回复