【问题标题】:How to control format of date read from spreadsheet, and display as table in email?如何控制从电子表格读取的日期格式,并在电子邮件中显示为表格?
【发布时间】:2015-08-12 11:06:43
【问题描述】:

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

我们有一个谷歌电子表格,其中包含 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 ,

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

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

提前非常感谢!

【问题讨论】:

  • 或者,是否可以创建一个 csv/excel 文件并将其作为附件发送出去,而不是在电子邮件正文中显示数据?
  • google "javascript 格式日期"。也涵盖在其他s.o.中问题。
  • 谢谢 Zig,但我的问题是我不知道在上面的脚本中我把它放在哪里,因为没有参考电子表格中的日期列 - 我缺乏知识在这里显示!
  • 其中一列包含日期对象。谷歌这个并试一试。这就是这个网站的意义:)

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


【解决方案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

我希望这会有所帮助。有什么问题,我会在cmets中回答。


  1. 要添加首句,您需要在句之前添加一个部分

    +"<TABLE border='1' table-layout:auto;>"
    

前:

+"<P> This is a new paragraphe before the table</P>"
+"<BR> This is a new line before the table</BR>"
  • 我不是 HTML 编写专家,因此对于更高级的格式,您可以随时搜索 html 格式。

  1. 要将某些内容加粗,您只需在要加粗的部分前后添加“strong”即可。

例如:

htmlmessage += "<TD><strong>"+headers[header]+"</strong></TD>";

  1. 如果您想删除或修改表格的边框设置,您可以随时增加或减少“border=1”旁边的数字。

我已经用你指定的修改修改了上面的代码。

【讨论】:

  • 最好使用Utilities.formatDate() 将日期格式化为特定的字符串格式。这样,它可以更容易地修改。
  • 太棒了@OrangeBender - 你的第一个脚本很有效,但由于某种原因,我无法成功替换上面提到的日期部分以使用 javascript 日期格式;我收到错误“ReferenceError:“行”未定义。另外 - 1.如何在表格之前的电子邮件正文中放置一个初始句子?2.如何将表格中的标题行格式化为粗体? 3. 如何将表格更改为没有双线?非常感谢。
  • @Mogsdad 感谢您提供的信息,我以前从未听说过该页面。我会更新我的代码。
  • NP,我希望你这样做。 ;^) 将您所有的“更新”cmets 也拉到您的答案中。提高答案质量比使用 cmets 更好。通常,您会更新答案,然后评论(可能是 @ 另一个用户)说它已更新,因为 cmets 会向用户生成警报。
  • @BenHuggins 一切都已更新。如果您需要其他任何东西,我会尽我所能提供帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-26
  • 1970-01-01
  • 2012-01-26
相关资源
最近更新 更多