【问题标题】:How do I update fields based on a Google Forms dropdown value?如何根据 Google 表单下拉值更新字段?
【发布时间】:2020-02-14 19:50:05
【问题描述】:

当我们的现场代表在工作现场时,我们正在使用 Google 表单从他们那里收集数据。我们使用脚本来填充 4 个不同字段的下拉值并定期运行。这使他们不必打字和可能出错。

所有这些字段都是预先确定的,因此如果他们选择项目 #1,我们已经知道地址、经理和客户的值。这些值存储在结果表单的第二个选项卡中,理论上可以用作查找。

我怀疑这些字段是否需要包含在内,但是当用户提交表单时,数据会使用附加组件通过电子邮件发送,并且它会在主题中使用其中的一些字段。我想收件人也想要这些信息。

我可以自己制作触发器吗?如果我有一个项目 ID 何时更改的触发器,我想我可以从电子表格中更新其他人。

或者,如果有一个 OnNextPage 触发器可以用来填充这些值。

提交表单时是否需要添加/更改值?

我认为以下是我想要做的(感谢@OMilo),但我正在努力查找:

函数 onFormSubmit(e) { Logger.log("[METHOD] onFormSubmit");

sendEmail(e.range); }

函数发送电子邮件(范围){

// 在这里我们可以选择表单中选择的用户: var itemResponse = e.response.getItemResponses()[1557784536]; // 使用项目的任何索引,在我的例子中是 0。 var kmbProjectNumber = itemResponse.getResponse();

//LOOKUP KMB PROJECT NUMBER IN SHEET: "New - KMB Design Visit Closeout (Responses)" TAB: "KMB Lookups"
var ss = SpreadsheetApp.OpenByID('REDACTED');
var lookups = ss.getSheetByName("KMB Lookups");

//In Column named'KMB Project ID' find record from bottom where value = kmbProjectNumber
//Get value for column named 'Site Address'
//Get value for column named 'KMB Project Manager'
//Get value for column named 'Client Assigning this Work'

// FETCH SPREADSHEET //
var values = range.getValues();
var row = values[0];

//WRITE FOUND VALUES TO SPREADSHEET
//Set row[3] to Site Address
//Set row[4] to Project Manger
//Set row[5] to Client

var svProjectManager = row[4]; //Update manually  //E
var svClient = row[5]; //Update manually  //F

// EXTRACT VALUES //
var svTimeStamp = row[0];  //A
var svInitials = row[1];  //B
var svProjectID = row[2];  //C
var svSiteAddress = row[3];  //Update manually    //D
var svProjectManager = row[4]; //Update manually  //E
var svClient = row[5]; //Update manually  //F
var svNOCNeeded = row[6];  //G


// PREPARE EMAIL //
var emailRecipients = "REDACTED";
var emailSubject = "Field Visit Completed for "+svProjectManager+" "+svProjectID;
var emailBody = ""  //Format using variables set

// SEND EMAIL //

}

【问题讨论】:

    标签: google-apps-script google-forms


    【解决方案1】:

    您不需要在表单本身中包含这些字段。相反,您可以根据他们在onFormSubmit 触发器触发的函数中选择的选项设置不同的值。

    我写了一个小示例来展示如何做到这一点。

    首先,如果您还没有创建 onFormSubmit 触发器:

    function createTrigger() {
      var form = FormApp.openById('your_form_id'); // Change accordingly
      ScriptApp.newTrigger('getData')
        .forForm(form)
        .onFormSubmit()
        .create();
    }
    

    接下来,创建当用户提交表单时将被触发器调用的函数:

    function getData(e) {
      // Here we get choice the users selected in the form:
      var itemResponse = e.response.getItemResponses()[0]; // Use whatever index is the item, in my case it's 0.
      var response = itemResponse.getResponse();
      var values = getDataFromSheet(); // Getting the values from the sheet
      for(var i = 1; i < values.length; i++) { // Checking which row from the sheet corresponds to the choice selected in the form
        var row = values[i];
        if(row[2] == response) { // Checks if current sheet row is the one selected in the form submission
          var emailData = { // Data for email to be sent is assigned depending on form choice and sheet data
            project: row[2],
            address: row[3],
            manager: row[4],
            client: row[5]
          }
        }
      }
      // Preparing email parameters
      var emailBody = emailData["address"] + " - " + emailData["manager"] + " - " + emailData["client"];
      var emailSubject = "Field Visit Completed for " + emailData["manager"] + " " + emailData["project"];
      var emailRecipient = 'valid email'; // Change accordingly
      // Sending email
      MailApp.sendEmail(emailRecipient, emailSubject, emailBody);
    }
    

    在上述函数中,getDataFromSheet被调用:

    function getDataFromSheet() {
      var ss = SpreadsheetApp.openById('your_spreadsheet_id'); // Change accordingly
      var lookups = ss.getSheetByName("KMB Lookups");
      var values = lookups.getDataRange().getValues();
      return values;
    }
    

    希望对你有用。

    【讨论】:

    • 谢谢你,OMila。我不确定这是否适用于我们所拥有的。他们用于电子邮件的插件获取所有字段和数据并通过电子邮件发送。虽然我看到我们如何分配 var 值。电子邮件需要发送他们输入的所有值以及我们查找的这些额外值。我希望我们查找的值也包含在响应表中。
    • 此外,该插件称为表单电子邮件通知。我无法获取能够添加任何内容的代码。我想我可以创建自己的电子邮件代码,但我不知道如何。
    • 另外,我没有解释清楚。我认为我不能使用 IF 语句来获取值。这些值每周更改两次。我需要的是获取项目 ID,然后在工作表中找到匹配的项目 ID,并为该行获取三个附加字段。
    • 好的,你能分享一个你正在处理的电子表格样本(当然没有敏感数据),以便我可以相应地更改我的代码吗?
    • 我已根据您的 cmets 和您的编辑更新了我的答案。我希望这很有用。
    猜你喜欢
    • 2016-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多