2014-02-13 2 views
1

Итак, я пытаюсь настроить электронную почту напоминания для автоматического отправки на основе даты в ячейке. Вроде как это: Google Apps Script - Send Email based on date in cell Вот мой пример книги: https://docs.google.com/spreadsheet/ccc?key=0AiHAV8ZZ5nexdDJqODhmamhldjN1ZTRKc09iZXNBZ3c#gid=0Скрипт Google Apps - отправьте электронное письмо на основе данных в ячейке

Это код, который у меня есть:

function sendEmail() { 
var sheet = SpreadsheetApp.getActiveSheet(); 
var startRow = 2; // First row of data to process 
var numRows = sheet.getLastRow()-1; // Number of rows to process 
// Fetch the range of cells A2:B3 
var dataRange = sheet.getRange(startRow, 1, numRows, sheet.getLastColumn()); 
// Fetch values for each row in the Range. 
var data = dataRange.getValues(); 
//Logger.log(data) 

for (i in data) { 
var row = data[i]; 
var date = new Date(); 
date.setHours(0); 
date.setMinutes(0); 
date.setSeconds(0); 
//Logger.log(date); 
var sheetDate = new Date(row[2]); 
//Logger.log(sheetDate); 
var Sdate = Utilities.formatDate(date,'GMT+0200','yyyy:MM:dd') 
var SsheetDate = Utilities.formatDate(sheetDate,'GMT+0200', 'yyyy:MM:dd') 
Logger.log(Sdate+' =? '+SsheetDate) 
    if (Sdate == SsheetDate){ 
     var emailAddress = row[0]; // First column 
     var message = row[1];  // Second column 
     var subject = "It's time to practice!" +message; 
     MailApp.sendEmail(emailAddress, subject, message); 
     //Logger.log('SENT :'+emailAddress+' '+subject+' '+message) 
     }  
} 
} 

Но я не уверен, если он работает, и он будет автоматически отправлять электронную почту из ? Очевидно, я знаю очень маленький сценарий.

ответ

0

только вас 1 ошибка в существующем коде разделяет здесь, что держит его от работы:

вар sheetDate = новый Дата (строка [2]);

У вас есть только 2 индексы в массиве, так что это должно быть:

вар sheetDate = новая дата (строка [1]);

Кроме того, потому что вы используете Utilities.formatDate к ггггу: ММ: дд, вам не нужно, чтобы установить часы минуты и секунды, потому что Utilities.formatDate возвращается строка без временной составляющей. Кроме того, вам не нужно создавать sheetDate или дату, оба они могут быть сконструированы как первый параметр в Utilities.formatDate (см. Ниже). Еще одна вещь в этой теме, потому что ваши значения даты отформатированы как дата в вашей электронной таблице, они возвращаются в ваш сценарий как объект даты, поэтому на самом деле нет необходимости вызывать новую дату (строка [1]), .. но это ничего не болит.

function sendEmail() { 
    try{ 
    var sheet = SpreadsheetApp.getActiveSheet(); 
    var startRow = 2; // First row of data to process 
    var numRows = sheet.getLastRow()-1; // Number of rows to process 
    // Fetch the range of cells A2:B3 
    var dataRange = sheet.getRange(startRow, 1, numRows, sheet.getLastColumn()); 
    // Fetch values for each row in the Range. 
    var data = dataRange.getValues(); 

    for (i in data) { 
     var row = data[i]; 
     //Logger.log(sheetDate); 
     var Sdate = Utilities.formatDate(new Date(),'GMT-0500','yyyy:MM:dd') 
     var SsheetDate = Utilities.formatDate(new Date(row[1]),'GMT+0200', 'yyyy:MM:dd') 
     Logger.log(Sdate+' =? '+SsheetDate) 
     if (Sdate == SsheetDate){ 
      var emailAddress = row[0]; // First column 
      var message = row[1];  // Second column 
      var subject = "It's time to practice!" +message; 
      MailApp.sendEmail(emailAddress, subject, message); 
      //Logger.log('SENT :'+emailAddress+' '+subject+' '+message) 
     }  
    } 
    }catch(err){ 
    Logger.log(err.lineNumber + ' - ' + err); 
    } 
} 
+0

Это потрясающе! Спасибо Киру. Еще два вопроса: 1. Если я добавлю больше пользователей в список электронной почты, мой сценарий автоматически подберет это? & 2. будет ли сценарий запускаться автоматически один раз в день, или мне нужно что-то сделать, чтобы заставить его это сделать? – user3304107

+0

Хорошо, поэтому я ответил на свой первый вопрос и частично на второй. Однако я настраиваю триггер, основанный на времени, но он не работает. Я пробовал указать конкретную дату и время и минутный таймер, но я не работаю для меня. – user3304107

+0

Я бы проверил вашу функцию sendEmail, чтобы убедиться, что она фактически отправляет электронные письма, когда это предполагается; убедитесь, что вы полностью авторизировали сценарий приложений. Я бы поставил перерыв в отладчике на -if (Sdate == SsheetDate) - и убедитесь, что ваши даты поступают так, как ожидалось. Если он функционирует так, как ожидалось, чем просто настроить ежедневный триггер для запуска в час дня, в который вы хотите отправить электронное письмо. –

Смежные вопросы