【问题标题】:Send reminder emails based on date根据日期发送提醒电子邮件
【发布时间】:2015-11-03 12:40:51
【问题描述】:

我正在使用以下脚本从 Google 表格发送电子邮件提醒,但想对其进行修改,使其在每行单元格 F 中指定的日期发送电子邮件。

var EMAIL_SENT = "EMAIL_SENT";

function sendEmails2() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var startRow = 2;  // First row of data to process
  var numRows = 999;   // Number of rows to process
  // Fetch the range of cells A2:B999
  var dataRange = sheet.getRange(startRow, 1, numRows, 999)
  // Fetch values for each row in the Range.
  var data = dataRange.getValues();
  for (var i = 0; i < data.length; ++i) {
    var row = data[i];
    var emailAddress = row[0];  // First column
    var subject = row[1];     // Second column
    var message = row[2];    // Third column
    var emailSent = row[3];     

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

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

这就是我所拥有的,任何在其中添加日期的尝试都失败了。

我遇到了这个较早的问题:Google Apps Script - Send Email based on date in cell,但无法将它与我的脚本结合起来。

【问题讨论】:

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


    【解决方案1】:

    that previous answer 中提供的解决方案 Serge 为您提供了一个非常灵活的脚本,能够使用日期/时间的任何部分作为发送标准。

    这是一种更简单且不太灵活的方法。假设:

    • 电子表格中的日期是日期,而不是字符串。
    • 我们只关心日期是否匹配;小时、分钟和秒是无关紧要的。
    • 电子表格中的脚本和提醒日期基于同一时区。

    这里的神奇之处在于比较日期。 JavaScript Date object 是从 1970 年开始所经过的时间(世界时)的数字表示。那么比较日期的相等性是很困难的。但是,由于上述假设,我们只关心 date,这很有帮助。为了解决时区问题并消除小时、分钟等的影响,我们只需使用相同的 Date 方法从要比较的日期对象生成日期字符串。 toLocaleDateString() 方法为我们调整时区。

    生成的脚本:

    var EMAIL_SENT = "EMAIL_SENT";
    
    function sendEmails3() {
      var today = new Date().toLocaleDateString();  // Today's date, without time
    
      var sheet = SpreadsheetApp.getActiveSheet();
      var startRow = 2;  // First row of data to process
      var numRows = 999;   // Number of rows to process
      // Fetch the range of cells A2:B999
      var dataRange = sheet.getRange(startRow, 1, numRows, 999)
      // Fetch values for each row in the Range.
      var data = dataRange.getValues();
      for (var i = 0; i < data.length; ++i) {
        var row = data[i];
        var emailAddress = row[0];  // First column
        var subject = row[1];     // Second column
        var message = row[2];    // Third column
        var emailSent = row[3];     
        var reminderDate = row[5].toLocaleDateString();  // date specified in cell F
    
        if (reminderDate != today)      // Skip this reminder if not for today
          continue;
    
        if (emailSent != EMAIL_SENT) {  // Prevents sending duplicates
    
          MailApp.sendEmail(emailAddress, subject, message);
          sheet.getRange(startRow + i, 4).setValue(EMAIL_SENT);
          // Make sure the cell is updated right away in case the script is interrupted
          SpreadsheetApp.flush();
        }
      }
    }
    

    【讨论】:

    • 这就像魔术一样,谢谢!很高兴了解日期假设,谢天谢地,所有假设都是正确的:)
    猜你喜欢
    • 2021-06-23
    • 2022-11-16
    • 2018-12-09
    • 1970-01-01
    • 2022-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多