如何控制从电子表格中读取的日期格式,并在电子邮件中显示为表格?

时间:2015-08-12 11:06:43

标签: email google-apps-script google-sheets google-docs

在这里完成编码新手,请原谅我的无知。

我们有一个谷歌电子表格,其中包含B2中的电子邮件地址,以及单元格A4和...之间的一堆数据。 DX(取决于数据的大小),我拼凑了一些脚本,以便为每个标签发送一封电子邮件:

function sendEmail() {

var ss = SpreadsheetApp.getActive();
for(var n in ss.getSheets()){// loop over all tabs in the spreadsheet
var sheet = ss.getSheets()[n];// look at every sheet in spreadsheet
var lastRow = sheet.getLastRow();
var to = sheet.getRange('B2').getValue();
var data = sheet.getRange('A4:D' + lastRow).getValues();
var body = '';
for( var row in data ) {
for( var col in data[row] ) {
body += data[row][col] + '\ ,';
  }
body += '\n';}
MailApp.sendEmail(to, 'Your Holiday Extras Company Credit Card Statement', body);
}
}

这样可以,但发送一封这样的电子邮件:

Cardholder ,Merchant ,Date Occurred ,Amount ,
A CLOSE ,test 11 ,Thu Jun 25 2015 00:00:00 GMT+0100 (BST) ,8.4 ,
A CLOSE ,test 12 ,Tue Jun 30 2015 00:00:00 GMT+0100 (BST) ,1.5 ,
A CLOSE ,test 13 ,Tue Jun 30 2015 00:00:00 GMT+0100 (BST) ,17 ,
A CLOSE ,test 14 ,Tue Jun 30 2015 00:00:00 GMT+0100 (BST) ,24.55 ,
A CLOSE ,test 15 ,Tue Jun 30 2015 00:00:00 GMT+0100 (BST) ,2.58 ,
A CLOSE ,test 16 ,Thu Jul 02 2015 00:00:00 GMT+0100 (BST) ,133.2 ,

......看起来非常糟糕,但确实包含了正确的数据。

无论如何,使用上面的脚本作为shell,将电子邮件正文格式化为表格以显示上述数据,如果没有,我将如何将数据格式更改为dd / mm / yy而不是包括时间等,还改变格式以停止在每个字段后出现的随机空格?

非常感谢提前!

1 个答案:

答案 0 :(得分:1)

好吧,使用表格格式化电子邮件的唯一方法是使用HTMLbody选项。 至于你有两个选项的日期要么你把它们变成字符串并删除你想要的东西,或者像Zig所说的那样使用javascript日期格式。

我修改了你的代码以获得表并使用字符串格式来修改文本..

function sendEmail() {
  var ss = SpreadsheetApp.getActive();
  for(var n in ss.getSheets())  // loop over all tabs in the spreadsheet
  {
    var sheet = ss.getSheets()[n];// look at every sheet in spreadsheet
    var lastRow = sheet.getLastRow();
    var to = sheet.getRange('B2').getValue();
    var headers = sheet.getRange('A4:D4').getValues()[0];
    var data = sheet.getRange('A5:D' + lastRow).getValues();
    var htmlmessage = "<HTML><BODY>"
     +"<P> This is a new paragraphe before the table</P>"
     +"<BR> This is a new line before the table</BR>"
     +"<P><TABLE border='0' table-layout:auto;>"
     +"<TR>";
    for (var header in headers)
    {
      htmlmessage += "<TD><Strong>"+headers[header]+"</strong></TD>";
    }
    htmlmessage += "</TR>";
    for (var row in data)
    {
      htmlmessage += "<TR>";
      for (var col in data[row])
      {
        htmlmessage += "<TD>" + data[row][col].toString().replace("00:00:00 GMT+0100 (BST)","") + "</TD>"
      }
      htmlmessage += "</TR>";
    }
    MailApp.sendEmail({
      to: to,
      subject: 'Your Holiday Extras Company Credit Card Statement',
      htmlBody: htmlmessage});
  }
}

你也可以替换这个

    for (var row in data)
    {
      htmlmessage += "<TR>";
      for (var col in data[row])
      {
        htmlmessage += "<TD>" + data[row][col].toString().replace("00:00:00 GMT+0100 (BST)","") + "</TD>"
      }
      htmlmessage += "</TR>";
    }

如果你想使用javascript数据格式。

  for (var col in data[row])
  {
    var temp = data[row][col]
    if (col == 2)
    {
      temp = Utilities.formatDate(temp, "GMT", "MM/dd/YYYY");
    }
    htmlmessage += "<TD>" + temp + "</TD>"
  }
  htmlmessage += "</TR>";
}

结果:

Cardholder  Merchant    Date Occurred   Amount
 A CLOSE    Test 12        6/30/2015    1.5
 A CLOSE    Test 13        6/30/2015    17
 A CLOSE    Test 14        6/30/2015    24.55
 A CLOSE    Test 15         2/7/2015    2.58
 A CLOSE    Test 16         2/7/2015    133.2

我希望这会有所帮助。如果您有任何疑问,我会在评论中回答。

  1. 要添加初始句子,您需要在

    之前添加一个部分
    +"<TABLE border='1' table-layout:auto;>"
    
  2. 前:

    +"<P> This is a new paragraphe before the table</P>"
    +"<BR> This is a new line before the table</BR>"
    
    • 我不是HTML专家,所以对于更高级的格式化,你总是可以搜索html格式化。
    1. 要以粗体显示某些内容,您只需在要加粗的部分之前和之后添加“strong”即可。
    2. 例如:

      htmlmessage += "<TD><strong>"+headers[header]+"</strong></TD>";
      
      1. 如果要删除或修改表格的边框设置,您可以随时增加或减少“border = 1”旁边的数字。
      2. 我已使用您指定的修改修改了上述代码。