Google Spreadsheets Script发送电子邮件和保持发送的电子邮件总数

时间:2013-02-10 17:09:08

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

我还在这里学习绳索和希望有人能够提出最好的解决方法(我已经找到了解决办法,但没有成功!):

我的电子表格非常简单:

A栏:电子邮件地址; B列:要发送的消息。 (列A是使用一个公式生成的,该公式从Sheet2中较长的地址列表中获取一些电子邮件地址。)

Sheet2包含所有电子邮件地址的“主”列表.-列A:名称; B栏:电子邮件收件人

我使用下面的代码作为起点。它将电子邮件发送到Sheet1中的地址,并在发送电子邮件时(或者更确切地说当脚本处理完该行时)用CMA标记“EMAIL_SENT”中的单元格。

我想在Sheet2的C栏中记录发送给每个人的电子邮件总数,但是我不知道最好的方法是什么,或者如果我是诚实的,从哪里开始!

function sendEmails() {

  var sheet = SpreadsheetApp.getSheetByName('Sheet1');
  var EMAIL_SENT = "EMAIL_SENT";
  var startRow = 1;  // First row of data to process
  var dataRange = sheet.getDataRange()
  var data = dataRange.getValues();

  for (var i = 0; i < data.length; ++i) {
    var row = data[i];
    var emailAddress = row[0];  // First column
    var message = row[1];       // Second column
    var emailSent = row[2];     // Third column

    if (emailSent != EMAIL_SENT) {  // Prevents sending duplicates

      var subject = "Sending emails from a Spreadsheet";

      MailApp.sendEmail(emailAddress, subject, message);
      sheet.getRange(startRow + i, 3).setValue(EMAIL_SENT);
      // Make sure the cell is updated right away in case the script is interrupted
      SpreadsheetApp.flush();  
}
}
}

如上所述,我想在Sheet2中为每个人保留计数,因为它包含每个人的电子邮件地址(而Sheet1只有少数几个,这个列表每天都会更改)。

任何人都可以对此有所了解吗?任何建议都将非常感谢。

非常感谢您的光临。

1 个答案:

答案 0 :(得分:1)

步骤1:在Sheet2中找到该电子邮件所在的行。

var sheet2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet2");
var numRows = sheet2.getDataRange().getNumRows();
var emailList = sheet2.getRange(1,2,numRows,1).getValues();
var emailRow = -1;
for (var j=0; j<numRows; j++) {        
  if (emailList[j][0]==WHATEVER_EMAIL_YOU_ARE_LOOKING_FOR) {
    emailRow = j;
    break;
  }
}
if (emailRow==-1) { /*ERROR! Couldn't find email.*/ }

第2步:获取旧的电子邮件数。

var oldValue = sheet2.getRange(emailRow+1,3).getValue();

步骤3:写入新值+ 1。

sheet2.getRange(emailRow+1,3).setValue(oldValue+1);

注意:emailRow从零开始,而getRange()是从一开始的。