如何根据答案总数而不是响应数限制 Google 表单提交
How to limit Google Form submissions based on total number of answers not number of responses
我创建了一个简单的注册表,只要求:
- 电子邮件地址(必填)
- 姓名(必填)
- 加上一个人的姓名(不需要 - 如果有的话)
我可以根据回复数量限制 Google 表单:
function closeForm() {
// get active form
var form = FormApp.getActiveForm();
// retrieve number of responses thusfar
var responses = form.getResponses();
// set close message
var msg = "We're sorry, the event is full.";
// do the math
if(responses.length >= 100) {
form.setAcceptingResponses(false).setCustomClosedFormMessage(msg);
}
}
但我不知道如何将限制设置为 1 和 2 的总和。(即剧院的总座位数)
有人可以帮我吗?
每次提交表单时,在表单上使用 onFormSubmit Event 到 运行 脚本。然后,您可以在 plusOne 列上循环,检查空值,以获得与会者总数。
function onEdit(){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Form Responses"); //change to match your sheet.
var currentGuests = sheet.getRange("GuestCountCell with A1Notation").getValue(); //get current count from cell on spreadsheet defined above.
//Do other stuff
}
试试这个代码。您需要在 form submit trigger
上 运行
function calculateTodayReservedSeats() {
var ss = SpreadsheetApp.openById(SPREADSHEET_ID);
var sheet = ss.getSheetByName(SHEET_NAME);
var lastRow = sheet.getLastRow();
var person1 = sheet.getRange(2, PERSON1_COLUMN_INDEX, lastRow - 1, 1).getValues();
var person2 = sheet.getRange(2, PERSON2_COLUMN_INDEX, lastRow - 1, 1).getValues();
var i, count;
for (i = 0; i < person1.length; i++) {
count += person1[i][0];
count += person2[i][0];
}
if (count > LIMIT) {
//Do your stuff
//You can disable your form
}
}
您需要定义以下常量:
- SPREADSHEET_ID
- SHEET_NAME
- PERSON1_COLUMN_INDEX
- PERSON2_COLUMN_INDEX
- 限制
这是未经测试的代码,如果这不起作用,请告诉我,我们可以进行调试。如果可行,那么您可以接受 solution/upvote.
感谢 @Chris W and @Umair 的不懈帮助,我终于能够创建一个符合我最初要求的表单。
以下脚本放置在表单的脚本编辑器中并在表单提交时触发:
function FormDisabling() {
var form = FormApp.getActiveForm();
var msg = 'Sorry, the event is full.';
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Total');
var range = sheet.getRange('d21’);
var data = range.getValue();
if (data <= 40) {
form.setAcceptingResponses(false).setCustomClosedFormMessage(msg);
}
}
仅当表格和附加的传播sheet设置如下时才有效:
第二个 sheet(总计)是从原始(响应)sheet 中添加的,并添加了一个额外的 (D) 列。 D2-D20 有一个 countif 公式 (=COUNTIF(A2:B2;"<>")
),而单元格 D21 汇总了这些值。如果其值大于脚本中设置的数字,则表单将禁用并显示自定义消息。
我敢肯定,对于原始问题有一个不那么棘手的方法。对于愚蠢的问题和评论,我很抱歉,这是我第一次涉足 Apps 脚本(以及一段时间内的逻辑思维)。
我创建了一个简单的注册表,只要求:
- 电子邮件地址(必填)
- 姓名(必填)
- 加上一个人的姓名(不需要 - 如果有的话)
我可以根据回复数量限制 Google 表单:
function closeForm() {
// get active form
var form = FormApp.getActiveForm();
// retrieve number of responses thusfar
var responses = form.getResponses();
// set close message
var msg = "We're sorry, the event is full.";
// do the math
if(responses.length >= 100) {
form.setAcceptingResponses(false).setCustomClosedFormMessage(msg);
}
}
但我不知道如何将限制设置为 1 和 2 的总和。(即剧院的总座位数)
有人可以帮我吗?
每次提交表单时,在表单上使用 onFormSubmit Event 到 运行 脚本。然后,您可以在 plusOne 列上循环,检查空值,以获得与会者总数。
function onEdit(){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Form Responses"); //change to match your sheet.
var currentGuests = sheet.getRange("GuestCountCell with A1Notation").getValue(); //get current count from cell on spreadsheet defined above.
//Do other stuff
}
试试这个代码。您需要在 form submit trigger
上 运行function calculateTodayReservedSeats() {
var ss = SpreadsheetApp.openById(SPREADSHEET_ID);
var sheet = ss.getSheetByName(SHEET_NAME);
var lastRow = sheet.getLastRow();
var person1 = sheet.getRange(2, PERSON1_COLUMN_INDEX, lastRow - 1, 1).getValues();
var person2 = sheet.getRange(2, PERSON2_COLUMN_INDEX, lastRow - 1, 1).getValues();
var i, count;
for (i = 0; i < person1.length; i++) {
count += person1[i][0];
count += person2[i][0];
}
if (count > LIMIT) {
//Do your stuff
//You can disable your form
}
}
您需要定义以下常量:
- SPREADSHEET_ID
- SHEET_NAME
- PERSON1_COLUMN_INDEX
- PERSON2_COLUMN_INDEX
- 限制
这是未经测试的代码,如果这不起作用,请告诉我,我们可以进行调试。如果可行,那么您可以接受 solution/upvote.
感谢 @Chris W and @Umair 的不懈帮助,我终于能够创建一个符合我最初要求的表单。
以下脚本放置在表单的脚本编辑器中并在表单提交时触发:
function FormDisabling() {
var form = FormApp.getActiveForm();
var msg = 'Sorry, the event is full.';
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Total');
var range = sheet.getRange('d21’);
var data = range.getValue();
if (data <= 40) {
form.setAcceptingResponses(false).setCustomClosedFormMessage(msg);
}
}
仅当表格和附加的传播sheet设置如下时才有效:
第二个 sheet(总计)是从原始(响应)sheet 中添加的,并添加了一个额外的 (D) 列。 D2-D20 有一个 countif 公式 (=COUNTIF(A2:B2;"<>")
),而单元格 D21 汇总了这些值。如果其值大于脚本中设置的数字,则表单将禁用并显示自定义消息。
我敢肯定,对于原始问题有一个不那么棘手的方法。对于愚蠢的问题和评论,我很抱歉,这是我第一次涉足 Apps 脚本(以及一段时间内的逻辑思维)。