2015-11-03 62 views
2

我使用以下脚本从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,但无法将其与我的脚本相结合。

回答

2

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

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

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

这里的魔法就是比较日期。 A JavaScript Date object是从1970年世界时间开始经过的时间的数字表示。比较日期的平等是困难的。但是,由于上述假设,我们只关心日期,这很有帮助。为了解决时区问题并消除小时,分钟等的影响,我们只使用相同的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(); 
    } 
    } 
} 
+0

此,像变魔术一样,谢谢!很好的了解日期假设,幸好所有假设都是真实的:) – Shadician