gpt4 book ai didi

google-apps-script - 如何从 Google 表单中提取响应项

转载 作者:行者123 更新时间:2023-12-04 10:07:17 26 4
gpt4 key购买 nike

我制作了一个表格来捕获 2 个数据。

  • 电子邮件地址。
  • 用户想要订阅的组。

  • 每个组都有自己的电子表格。 [根据发布的代码,每个人在同一个电子表格中都有自己的工作表。]

    当用户提交表单时,表单应该捕获电子邮件地址,并将数据发送到用户订阅的相应电子表格。

    这是我到目前为止所做的。我卡住了。。

    有没有办法专门从特定的文本框/选项..等中检索数据?

    我知道的唯一方法是循环所有数据并逐一检索它......这使我很难将 2 个数据链接在一起......例如: "johndoh@email.com" subscribed to "Group 1"
    function onFormSubmit() {
    var form = FormApp.getActiveForm();

    var formResponses = form.getResponses();
    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];

    // Checks if it is multiple choice option
    if (itemResponse.getItem().getType() == FormApp.ItemType.MULTIPLE_CHOICE) {

    // If user chooses group 1, open spreadsheet and store user's email in 1st column
    if (itemResponse.getResponse() == "1") {
    var ss = SpreadsheetApp.openById("id goes here");
    var sheet = ss.getSheetByName("Group subscription email");
    }
    }


    }
    }
    }

    最佳答案

    Is there a way to retrieve data specifically from a particular textbox/options ..etc?



    是的,它会简化您的任务。相关文档是 Event Objects .

    您的触发器函数将在触发时提供一个事件对象。在您的情况下,Forms 表单提交事件,该事件包括 FormResponse对象,可通过 response 访问属性。无需遍历回复或打开表单。

    由于我们可以从单个回复中获取电子邮件和群组,因此将两者关联起来就变得微不足道了。您将看到一个辅助函数用于获取适当工作表的句柄以添加订阅。

    简单的方法 - 需要所有响应

    只要你的问题是需要的, getItemResponses()返回的数组将按照它们在表单中出现的顺序包含项目响应。
    /**
    * Trigger function for Google Forms "Form submit" event.
    * Simple, assumes all answers are provided, no error checking.
    */
    function onFormSubmit(e) {
    var formResponse = e.response;
    // If all questions are required, getItemResponses returns responses in form-order
    var itemResponses = formResponse.getItemResponses();
    var email = itemResponses[0].getResponse(); // returns a string
    var group = itemResponses[1].getResponse();

    var sheet = getGroupSheet( group ); // use helper function to get right sheet

    if (sheet) {
    sheet.appendRow([email]); // Add subscriber as a single-cell row
    }
    }

    /**
    * Gets the sheet for the indicated group.
    * Helper function for onFormSubmit().
    *
    * @param {string} group The ID of the group, from user's response
    *
    * @returns {Sheet} Sheet object for the given group,
    * null if group is unknown.
    */
    function getGroupSheet( group ) {
    var ssId = "id goes here";
    switch (group) {
    case "1":
    var name = "Group subscription email";
    break;
    // case "2": // Add cases to handle other groups
    // var name = "Other sheet name";
    // break;
    default: // If the group is unknown, log it
    name = "";
    Logger.log("Unexpected group ID ("+group+")");
    break;
    }

    if (name) {
    var result = SpreadsheetApp.openById(ssId).getSheetByName(name);
    }
    else {
    result = null; // Return null for unknown groups
    }
    return result;
    }

    适应性方法#1 - 项目索引

    知道所有响应项都存在确实使事情变得简单,但我们不能总是依赖于此。如果有可能将响应项留空,我们将需要获得特定的答案。

    有几种方法可以做到这一点。我们将看两个。首先,使用项目索引:
    /**
    * Trigger function for Google Forms "Form submit" event.
    * Flexible - checks for specific response items by getting the item index
    * for each response item. Example: if user answered questions 1 and 3, but not 2,
    * e.response would contain itemResponses for items 0 and 2, but not 1.
    */
    function onFormSubmit2(e) {
    var formResponse = e.response;
    var itemResponses = formResponse.getItemResponses();

    for (var i=0; i<itemResponses.length; i++) {
    switch (itemResponses[i].getItem().getIndex()) {
    case 0:
    var email = itemResponses[i].getResponse(); // returns a string
    break;
    case 1:
    var group = itemResponses[i].getResponse();
    break;
    }
    }

    var sheet = getGroupSheet( group ); // use helper function to get right sheet

    if (sheet) {
    sheet.appendRow([email]); // Add subscriber as a single-cell row
    }
    }

    适应性方法#2 - 项目标题(问题文本)

    使用索引使我们摆脱了提供所有答案的要求,但仍然很脆弱;如果表单被修改,则需要维护工作,以确保索引保持一致。

    我们可以使用的一个改进是使用问题的文本来选择我们的答案。如果问题被改写,我们仍然需要小心 - 但这种方法可以适应顺序或问题的变化或添加非问题项目,例如图像、分页符、视频或标题。
    /**
    * Trigger function for Google Forms "Form submit" event.
    * More Flexible - checks for specific response items by getting the item title
    * for each response item. No need to know the exact order of questions this way,
    * as long as we know what the question was. (Ideal if the form is
    * created programmatically.)
    */
    function onFormSubmit3(e) {
    var formResponse = e.response;
    var itemResponses = formResponse.getItemResponses();

    for (var i=0; i<itemResponses.length; i++) {
    switch (itemResponses[i].getItem().getTitle()) {
    case "Email Address":
    var email = itemResponses[i].getResponse(); // returns a string
    break;
    case "Group":
    var group = itemResponses[i].getResponse();
    break;
    }
    }

    var sheet = getGroupSheet( group ); // use helper function to get right sheet

    if (sheet) {
    sheet.appendRow([email]); // Add subscriber as a single-cell row
    }
    }

    关于google-apps-script - 如何从 Google 表单中提取响应项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26253706/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com