首页 > 解决方案 > 如何使用谷歌脚本通过电子邮件从电子表格发送数据

问题描述

我正在使用谷歌表格进行在线注册。一旦有人提交,一封电子邮件将发送到他们输入的电子邮件。数据是他们在表格中输入的内容。因此,这封电子邮件用作数据确认电子邮件。现在的问题是,我所做的测试是成功的,但是电子邮件包含所有数据。我的问题是,如何从特定行通过电子邮件发送特定电子邮件的数据

这就是我所做的(从某人那里复制)

      function sendEmail() {

 //setup function
 var ActiveSheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
 var StartRow = 3;
 var RowRange = ActiveSheet.getLastRow() - StartRow + 1;
 var WholeRange = ActiveSheet.getRange(StartRow,1,RowRange,11);
 var AllValues = WholeRange.getValues();

 var message = "";
  //iterate loop
 for (i in AllValues) {

 //set current row
 var CurrentRow = AllValues[i];

 //define column to check if sent
 var EmailSent = CurrentRow[11];

 //if row has been sent, then continue to next iteration
 if (EmailSent == "sent") 
 continue;

 //set HTML template for information
 message +=
  "<p><b>Found by: </b>" + CurrentRow[1] + "</p>" +
  "<p><b>Title: </b>" + CurrentRow[2] + "</p>" +
  "<p><b>Agency: </b>" + CurrentRow[3] + "</p>" +
  "<p><b>Summary: </b>" + CurrentRow[4] + "</p>" +
  "<p><b>Due: </b>" + CurrentRow[5] + "</p>" +
  "<p><b>Posted: </b>" + CurrentRow[6] + "</p>" +
  "<p><b>Total Funding: </b>" + CurrentRow[7] + "</p>" +
  "<p><b>Announcement Number: </b>" + CurrentRow[8] + "</p>" +
  "<p><b>Useful Links: </b>" + CurrentRow[9] + "</p><br><br>";

  //set the row to look at
  var setRow = parseInt(i) + StartRow;

  //mark row as "sent"
  ActiveSheet.getRange(setRow, 11).setValue("sent");
  }

 //define who to send grants to 
 var SendTo = "emailaddress1@gmail.com" + "," + "emailaddress2@gmail.com";

 //set subject line
 var Subject = "Grants";


  //send the actual email  
  MailApp.sendEmail({
  to: SendTo,
  cc: "",
  subject: Subject,
  htmlBody: message,
   });
    }

标签: emailgoogle-apps-script

解决方案


我最近回答了一个类似的问题。对我来说,将问题分解成我们需要的部分总是比较容易的。在这种情况下,我们需要: 所有的响应,然后我们需要匹配一个响应

最好的方法是首先将表单响应作为数组读取:

function formResponsesToArray() {
  var app = FormApp.openById(...),
  responses = app.getResponses(), stringResponses = []

  responses.forEach(function(r) {
    var response = []
    r.getItemResponses().forEach(function(i) {
      response.push(i.getResponse())
    })

    stringResponses.push(response)
  })

  Logger.log(stringResponses)
}

如果您知道这些人的电子邮件,那么我们可以得到他们的回复,假设电子邮件是他们在表单中输入的第一件事:

var theirEmail = "hello@hello.com"
var theirResponse = stringResponses.filter(function(response) {
  return response[0] === theirEmail
})

然后您可以使用 theirResponse 获取他们在表单中输入的信息!


推荐阅读