0

我仍然在这里学习绳索,希望有人能提出最好的解决方法(我已经寻找解决方案但没有成功!):

我有非常简单的电子表格:

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

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

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

我想在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 只有少数几个,并且此列表每天都会更改)。

任何人都可以对此有所了解吗?任何建议将不胜感激。

非常感谢您的关注。

4

1 回答 1

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() 是从一开始的。

于 2013-02-10T19:25:13.550 回答