合并行以根据多种条件发送到电子邮件

时间:2019-08-02 08:14:49

标签: javascript google-apps-script google-sheets

怎么了!目前,我有一个工作代码,如果“提醒日期” 是今天或之前,并且未勾选“完成” 复选框,则允许从Google表格发送电子邮件。 / p>

当前,我使用TEXTJOIN函数来合并要发送的任务以及与相同收件人的任务。当我运行代码时,它不会在项目符号中列出项目,而是在一行中列出。我不确定如何重写“消息”部分,以使这些文本连接的值成为项目符号。

这是当前代码:

function sendEmails() {
  var now = new Date().toLocaleDateString();
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheets = ss.getSheets();
  var startRow = 2;  
  var sheet = ss.getSheetByName ('Tasks')
  var numRows = sheet.getLastRow()-1;
  var dataRange = sheet.getRange(startRow, 1, numRows, sheet.getLastColumn());
  var data = dataRange.getValues();
  for (var i = 0; i < data.length; ++i) {
    var row = data[i];
    var emailAddress = row[0]; 
    var message = row[2];       
    var ReminderDate = row[3].toLocaleDateString();
    var Status = row[5];
    var subject = "Task reminders";

    if (ReminderDate > now)
      continue;

    if (Status != true) {  
      var Email = {
        to: emailAddress,
        subject: "Task reminders  |  "+now,
        htmlBody:
        "Good day! This is to remind you of the following specific task/s:"+
        "<br />"+
        "<ul><li>"+message+"</li></ul>"+
        "<br /><br />"+
        "You can access the Task monitoring sheet by clicking <a href=" + ss.getUrl() + ">here</a>.",
        name: "Taks monitoring",
      };
      MailApp.sendEmail(Email);
      sheet.getRange(startRow + i, 5).setValue(now);
      SpreadsheetApp.flush();
      }
     }
    }

以下是Google工作表:

enter image description here

这是我收到的信息:

enter image description here

但这是我真正想要的:

enter image description here

我尝试使用Google搜索多个示例,但不确定为什么我似乎没有找到任何类似的案例,所以不确定是否做错了。我希望我可以在这里获得有关如何理解和学习实现目标的指导。我不确定,但是我认为这与代码读取message的方式有关,或者也许我现在不应该TEXTJOIN了-只捕获要发送到同一行的各个行人,并通过代码(也不确定如何执行此操作,甚至可能的话)将它们组合在一起。

2 个答案:

答案 0 :(得分:3)

此解决方案假定列表项之间存在单元内换行符。

此行之后:

var message = row[2];       

添加此行

  message = message.replace(/\n/g, "</li><li>");

它将用HTML标签替换换行符。

答案 1 :(得分:1)

  • 根据您的情况,电子表格中单元格中的换行符不会反映到电子邮件中。
  • 您想将换行符反映到电子邮件中。

如果我的理解正确,那么这个答案如何?根据您的情况,B2.scss用作HTML数据。那么如何进行如下修改?请认为这只是几个答案之一。

发件人:

message

收件人:

var message = row[2];

发件人:

var message = row[2].split("\n").reduce(function(s, e) {return s += "<li>" + e + "</li>"}, "");

收件人:

"<ul><li>"+message+"</li></ul>"+

参考文献:

如果我误解了您的问题,而这不是您想要的结果,我深表歉意。