如何根据答案总数而不是响应数限制 Google 表单提交

How to limit Google Form submissions based on total number of answers not number of responses

我创建了一个简单的注册表,只要求:

  1. 电子邮件地址(必填)
  2. 姓名(必填)
  3. 加上一个人的姓名(不需要 - 如果有的话)

我可以根据回复数量限制 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 脚本(以及一段时间内的逻辑思维)。