For和MailApp的问题

时间:2019-08-20 19:55:27

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

我有一个已经从其他代码编译而来的代码,但是它并没有完全满足我的要求。这个想法是在每一行中循环搜索关键字(TRUE),然后将电子邮件发送到A列列出的电子邮件地址,并将消息发送到B列。不幸的是,我不够熟练,无法自己完成这项工作。

function findAndSendMail() {
  var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Reminder');
  var search = "TRUE"
  var lastRow = ss.getLastRow();
  var range = ss.getRange(1,5,lastRow); //define range for column E
  //find all occurrences of "TRUE" in column E and push range to array
  var ranges = range.createTextFinder(search).findAll();
  var message = '';

  //loop through each range
  for (i = 0; i < ranges.length; i++) {

    var row = ranges[i].getRow();
    var lastCol = ss.getLastColumn();
    var values = ss.getRange(row, 1, 1, lastCol).getValues(); //get all values for the row
    var emailAddress = values[0][0];       //column A
    var reminder = values[0][1]; //column B
    var sendvalidation = values[0][4]; //column E

    if (sendvalidation = true) {
      message+=Utilities.formatString("**This is an automated message.**\n\n"+reminder+"\n\n**This is an automated message.**");
    }

  var subject = 'General Reminder';

  if (message) {
    MailApp.sendEmail(emailAddress, subject, message);
  }
}
}

我希望每行一封电子邮件,其中仅包含该行的信息。我现在得到的是第一行的一封电子邮件,然后是第一行和第二行的另一封电子邮件,然后是第一行,第二行和第三行的另一封电子邮件,等等。

2 个答案:

答案 0 :(得分:1)

根据问题,听起来好像您有一个电子表格,并且如果col E =“ TRUE”,您希望它将col B中的内容发送给col A中的收件人。我本人还是一个新手,但是这是我要如何处理这种情况。我们在这里所做的是将电子表格中的所有数据拉入一个数组,然后在该数组上循环,如果col E =“ TRUE”,则将行推入一个新数组。然后,我们遍历新数组,并为每行发送一封包含其数据的电子邮件。

`function findAndSendMail() {
  var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Reminder');
  var data = ss.getDataRange().getValues();
  var emails = [];
  for(var i = 0; i < data.length; i ++) {
   //  Make sure this points at the column you want to check 
    if(data[i][4] === "TRUE") {
      emails.push(data[i]);
    }
  }
  for(var j = 0; j < emails.length; j ++) {
    var row = emails[j];
    var emailAddress = row[0];
    var reminder = row[1];
    if(reminder !== "") {
      var message = "**This is an automated message.**\n\n"" + reminder + "\n\n**This 
is an automated message.**";
      var email = {
        to: emailAddress,
        subject: "General Reminder",
        body: message
        };
      MailApp.sendEmail(email);
    } 
  }
 } `

答案 1 :(得分:1)

自行解决。我窃取的代码设置不同,因此我可以通过删除一些条件来使其正常工作。

function findAndSendMail() {
  var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Reminder');
  var search = "TRUE"
  var lastRow = ss.getLastRow();
  var range = ss.getRange(1,5,lastRow); //define range for column E
  //find all occurrences of "TRUE" in column E and push range to array
  var ranges = range.createTextFinder(search).findAll();

  //loop through each range
  for (i = 0; i < ranges.length; i++) {

    var row = ranges[i].getRow();
    var lastCol = ss.getLastColumn();
    var values = ss.getRange(row, 1, 1, lastCol).getValues(); //get all values for the row
    var emailAddress = values[0][0];       //column A
    var reminder = values[0][1]; //column B
    var sendvalidation = values[0][4]; //column E

    var message = reminder;
    var subject = 'General Reminder';
    MailApp.sendEmail(emailAddress, subject, "**This is an automated message.**\n\n"+message+"\n\n**This is an automated message.**");
  }
}