【问题标题】:Send range from Google spreadsheet as Email (formatting issue)从 Google 电子表格发送范围作为电子邮件(格式问题)
【发布时间】:2014-02-10 14:26:14
【问题描述】:

以下代码为第 2 列和第 3 列中的数据发送一封电子邮件,但电子邮件中的结果不是一个低于另一个。

Code.gs
function email() {

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var bulk = ss.getSheetByName("Bulk");
  var lastrow = bulk.getLastRow();

  var data1 = bulk.getRange(1, 2, lastrow).getValues();
  var data2 = bulk.getRange(1, 3, lastrow).getValues();

  var onedata="", twodata="";

  for (var i =1; i < data1.length; i++) {
    if (onedata.length) {
              onedata += ", ";
    }
   onedata += data1[i] 
  }

  for (var i =1; i < data2.length; i++) {
    if (twodata.length) {
              twodata += ", ";
    }
   twodata += data2[i] 
  }

  var report = ""

  report += "<tr><td style='padding:5px'>" + onedata + "</td><td style='padding:5px'>" + twodata + "</td></tr>";


  report ="<table><tr><th'>First data</th><th>Second data</th></tr>" + report + "</table>";

  MailApp.sendEmail(Session.getActiveUser().getEmail(),
                    "Your report", report, {htmlBody: report});

  }

通过电子邮件收到结果

First data                  Second data
Apple, Orange, Grapes,      Red, Orange, Green, Yellow,
Banana, Chickoo             Grey

预期结果

First data  Second data
Apple       Red
Orange      Orange
Grapes      Green
Banana      Yellow
Chickoo     Grey

【问题讨论】:

    标签: google-apps-script google-sheets google-spreadsheet-api


    【解决方案1】:

    你在 for 循环中犯了一个小错误。

    这里你的代码稍作修改:

    function email() {
      var ss = SpreadsheetApp.getActiveSpreadsheet();
      var bulk = ss.getSheetByName("Bulk");
      var lastrow = bulk.getLastRow();
    
      var data1 = bulk.getRange(1, 2, lastrow).getValues(); // fruit column
      var data2 = bulk.getRange(1, 3, lastrow).getValues(); // color column
    
      var report = ""
      var fruitTable ="";
      for(var i in data1){
        if(data1[i]!="") fruitTable += "<tr><td style='padding:5px'>" + data1[i] + "</td><td style='padding:5px'>" + data2[i] + "</td></tr>";
      }
    
      report ="<table><tr><th>First data</th><th>Second data</th></tr>" + fruitTable + "</table>";
    
      MailApp.sendEmail(Session.getActiveUser().getEmail(),
                        "Your report", report, {htmlBody: report});
    }
    

    我希望这能满足您的需求。
    哈罗德

    【讨论】:

    • 糟糕,抱歉,我们几乎同步发布了!有趣的是我们想出了非常相似的代码^^
    • 哈哈!确实我们的答案非常相似,但是在阅读了您的代码后,我必须承认您的答案在“空”语句中更加“性感”。
    • 我在 Google 上搜索了“性感代码”的定义,但一无所获 :-) 应该在某处发布定义......谢谢,我很感激!!
    • 谢谢你和 Serge Insas 的回答,虽然我使用了 Serge 的性感代码,但我已将你的回答标记为完整,我相信 Serge 会对此感到满意。
    【解决方案2】:

    表格构造有一些错误,下面是一个循环更简单的代码,随意调整它的方式...因为它添加了一些我用来简化测试的功能... (风格+条件)

    function email() {
      var ss = SpreadsheetApp.getActiveSpreadsheet();
      var bulk = ss.getSheetByName("Bulk");
      var lastrow = bulk.getLastRow();
      var data = bulk.getRange(1, 2, lastrow,2).getValues();  
      var tableData = "<table border=1><th>First data</th><th>Second data</th>"
    
      for (var i =1; i < data.length; i++) {
        var d1=data[i][0]==''?'empty ':data[i][0];
        var d2=data[i][1]==''?'empty ':data[i][1];
        tableData+="<tr><td>"+d1+"</td><td>"+d2+"</td></tr>"
      }
      tableData+="</table>";
    
      MailApp.sendEmail(Session.getActiveUser().getEmail(),
                        "Your report", "html only", {htmlBody: tableData});
    }
    

    编辑:

    利用 Harold 的回答,我添加了一些样式以使其更“性感”;-)

    function email() {
      var ss = SpreadsheetApp.getActiveSpreadsheet();
      var bulk = ss.getSheetByName("Bulk");
      var lastrow = bulk.getLastRow();
      var data = bulk.getRange(1, 2, lastrow,2).getValues();  
      var tableData = '<TABLE style="border-collapse:collapse;"border = 1 cellpadding = 5 ><th style=color:blue>First data</th><th style=color:green>Second data</th>'
    
      for (var i =1; i < data.length; i++) {
        var d1=data[i][0]==''?'empty':data[i][0];
        var d2=data[i][1]==''?'empty':data[i][1];
        tableData+="<tr><td style=color:blue>"+d1+"</td><td style=color:green>"+d2+"</td></tr>"
      }
      tableData+="</table>";
    
      MailApp.sendEmail(Session.getActiveUser().getEmail(),
                        "Your report", "html only", {htmlBody: tableData});
    }
    

    【讨论】:

    • 感谢 Serge,它完美运行,是的,它看起来也很性感。有关日期格式的任何帮助,我有 10/2/2014(2 月 10 日),但结果是“Thu Oct 02 2014 00:00:00 GMT+0530 (IST)”。我们可以只得到“14 年 2 月 10 日”吗? :)
    • 您可以使用Utilities.formatDate() 来格式化您的日期。
    • Vasim,你如何解决这个“”Thu Oct 02 2014 00:00:00 GMT+0530 (IST)“”?你能告诉我你如何改变格式吗?在我的案例中:列有“29/11/2016 10:00”并出现“Tue Nov 29 2016 10:00:00 GMT-0300 (ART)”
    猜你喜欢
    • 1970-01-01
    • 2014-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多