2015-11-03 131 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

相關問題