如何使用数组格式化电子表格数据中的电子邮件?

时间:2013-07-15 15:50:33

标签: google-apps-script google-sheets

我对编码很新,我需要一些代码的帮助。这是我的问题:我想在Google电子表格中获取许多数据单元并通过电子邮件发送。我想出了如何将数据拉入电子邮件并且电子邮件发送,但是,数据仅用逗号分隔,很难区分。如何让每个单元格的数据显示在电子邮件的单独行中?我相信我可以用数组做到这一点,但正如我所说的,我是新手,我无法弄清楚到目前为止我读到的内容是怎么做的。如果你能提供一个解释,那将非常感激 - 希望这将使我不再再问同样的问题并教我。感谢您的耐心和帮助!

function emailData() {

//Gather data from "Responses" sheet
var ss = SpreadsheetApp.getActiveSpreadsheet();
var responses = ss.getSheetByName("Form Responses");
var lastRow = responses.getLastRow();
var data = responses.getRange("A"+(lastRow)+":AK"+(lastRow));
var values = data.getValues();

//Gather email addresses from "Email" sheet (I have not gotten this far yet)
var email = ss.getSheetByName("Email");
var startRow = 2;
var emailAdress = "email@email.com";
var subject = "Capacity Campaign Contact Form";
MailApp.sendEmail(emailAdress,subject,values);
}

2 个答案:

答案 0 :(得分:6)

您的数组(称为Values)是一个2维数组,对应于工作表中的一行,这意味着您必须遍历其第一个元素。 我编写了一个带有函数的小脚本,该函数使用标题和值组成消息,如下所示:

function test(){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var responses = ss.getSheetByName("Form Responses");
  var lastRow = responses.getLastRow();
  var values = responses.getRange("A"+(lastRow)+":AK"+(lastRow)).getValues();// get the range and values in one step
  var headers = responses.getRange("A1:AK1").getValues();// do the same for headers
  var message = composeMessage(headers,values);// call the function with 2 arrays as arguments
  Logger.log(message);// check the result and then send the email with message as text body
}

function composeMessage(headers,values){
  var message = 'Here are the data :'
  for(var c=0;c<values[0].length;++c){
    message+='\n'+headers[0][c]+' : '+values[0][c]
  }
  return message;
}

请注意,您可以使用相同的结构,使用html table (see reference here)

以html格式构建更好看的电子邮件

EDIT2

我写了一小段代码,在表格中以文本和HTML格式生成,随意改进HTML格式化等等......

function testMail(){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var responses = ss.getSheetByName("Sheet1");
  var lastRow = responses.getLastRow();
  var values = responses.getRange("A"+(lastRow)+":M"+(lastRow)).getValues();
  var headers = responses.getRange("A1:AK1").getValues();
  var message = composeMessage(headers,values);
  var messageHTML = composeHtmlMsg(headers,values);
  Logger.log(messageHTML);
  MailApp.sendEmail(Session.getEffectiveUser().getEmail(),'test html', message,{'htmlBody':messageHTML});
}

function composeMessage(headers,values){
  var message = 'Here are the data you submitted :\n'
  for(var c=0;c<values[0].length;++c){
    message+='\n'+headers[0][c]+' : '+values[0][c]
  }
  return message;
}


function composeHtmlMsg(headers,values){
  var message = 'Here are the data you submitted :<br><br><table style="background-color:lightblue;border-collapse:collapse;" border = 1 cellpadding = 5><th>data</th><th>Values</th><tr>'
  for(var c=0;c<values[0].length;++c){
    message+='<tr><td>'+headers[0][c]+'</td><td>'+values[0][c]+'</td></tr>'
  }
  return message+'</table>';
}

编辑3

关注您的评论:这是我的测试表+屏幕截图的日志。检查您的日志,看看您是否获得了与数据类似的结构。

[13-07-16 14:29:40:920 CEST] Here are the data you submitted :<br><br><table style="background-color:lightblue;border-collapse:collapse;" border = 1 cellpadding = 5><th>data</th><th>Values</th><tr><tr><td>Titre</td><td>Mr</td></tr><tr><td>nom</td><td>Wales</td></tr><tr><td>prénom</td><td>xavier</td></tr><tr><td>adresse</td><td>Sunset Bld, 45678</td></tr><tr><td>code</td><td>5000</td></tr><tr><td>ville</td><td>Los Angeles</td></tr><tr><td>pays</td><td>USA</td></tr><tr><td>email</td><td>john.smith@gmail.com</td></tr><tr><td>tél1</td><td>1212345654345</td></tr><tr><td>tél2</td><td></td></tr><tr><td>Commun</td><td>Théâtre</td></tr><tr><td>GROUPE</td><td>Festival</td></tr><tr><td>organisme</td><td>xxx</td></tr></table>

enter image description here

  • “th”是标题标记(在&lt;&gt;之间,我不能在此处写,因为浏览器没有显示它)
  • “td”是单元格标记(介于&lt;&gt;之间,因为浏览器没有显示,所以我无法在此处写入)
  • “tr”是“行”标签(在&lt;&gt;之间,我不能在此处写,因为浏览器没有显示它)

这些标签中的每一个都必须以/ t ...结束标签(周围的&lt;&gt;)终止才有效。脚本中的循环结构会自动处理,就像您在日志数据中看到的那样。

另请注意,我在循环结束时添加了一个表结束标记...我在第一个代码中忘记了它,但它在我的测试中就像那样。

答案 1 :(得分:0)

正如你所看到的,我在“商业或教会”之前缺少一个开口标签。但是,我的代码看起来和你的完全一样。你可以在屏幕截图中看到它在做什么。

[13-07-16 08:05:34:247 EDT] Here is the data you submitted :<br><br><table style="background-color:white;border-collapse:collapse;" border = 2 cellpadding = 5><th>Question</th><th>Answers</th><tr><td>Timestamp</td><td>Thu Jun 06 2013 10:18:31 GMT-0400 (EDT)</td></tr><td>Business or Church Name</td><td>Tim K</td></tr><td>Name</td><td>Test</td></tr><td>Business or Church Name</td><td>business</td></tr><td>Your Name</td><td>Blank, Gary</td></tr><td>Meeting Date</td><td>date</td></tr><td>Meeting Lead</td><td>Jerry 

Screen shot