【问题标题】:Google Spreadsheets Script to send e-mails & keep count of total e-mails sent用于发送电子邮件并记录已发送电子邮件总数的 Google 电子表格脚本
【发布时间】:2013-02-10 17:09:08
【问题描述】:

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

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

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 只有少数几个,而且这个列表每天都会改变)。

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

非常感谢您的关注。

【问题讨论】:

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


    【解决方案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() 是从一开始的。

    【讨论】:

    • 您好菲尔,感谢您的解决方案。不幸的是,我无法让代码循环遍历 sheet1 中的所有电子邮件。在我添加你的代码之前它已经工作了,所以我想我把你的代码放在了错误的地方?请你告诉我为什么这不起作用:我用“emailAddress”替换了“WHATEVER_EMAIL_YOU_ARE_LOOKING_FOR”,并在脚本底部添加了 Step1 代码,直接在“SpreadsheetApp.flush();”下。我将第 2 步和第 3 步代码直接粘贴在“{ /*ERROR!找不到电子邮件。*/}”下的第 1 步代码下。提前致谢。
    • 道歉。那是因为我无意中重用了变量i。更改我在步骤 1 中使用 i 的所有时间。这应该可以解决它。我会更新我的答案。
    • 非常感谢你,菲尔。该脚本现在可以完美运行。我很抱歉没有发现这一点!
    • 我刚刚注意到另一个需要替换的“i”,我无法对其进行编辑,因为它少于 6 个字符。它位于:“for (var j=0; i
    • 已修复。 =) 现在好多了。
    猜你喜欢
    • 1970-01-01
    • 2014-09-14
    • 2011-09-16
    • 2020-04-14
    • 2020-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多