我環顧四周,看到了一些小零件,但無法將拼圖放在一起。我正在嘗試創建一個腳本,該腳本將在配置爲每天運行的觸發器上運行。觸發器將在編輯器的「資源」選項下進行設置。Google Apps腳本 - 根據單元格中的日期發送電子郵件
基本上我正在尋找腳本來捕獲一系列的單元格,確定一個截止日期,它將填充到列中,並與當前日期相匹配。如果匹配,則發送電子郵件。我已經開始從Google的電子表格教程發送電子郵件。我已經添加了if語句來檢查日期,但是我將它與dataRange進行比較而丟失。任何人都可能幫助糾正這些問題,或者指引我去研究。
腳本似乎運行但沒有任何反應,我相信是因爲「if(currentTime == dataRange)」dataRange不正確匹配?
下面是代碼:
function sendEmails() {
var sheet = SpreadsheetApp.getActiveSheet();
var startRow = 2; // First row of data to process
var numRows = 50; // Number of rows to process
// Fetch the range of cells
var dataRange = sheet.getRange(startRow, 1, numRows, 2)
// Fetch values for each row in the Range.
var data = dataRange.getValues();
//Get todays date
var currentTime = new Date();
var month = currentTime.getMonth() + 1;
var day = currentTime.getDate();
var year = currentTime.getFullYear();
//Test column for date due & match to current date
if (currentTime == dataRange) {
for (i in data) {
var row = data[i];
var emailAddress = row[0]; // First column
var message = row[1]; // Second column
var subject = "Task Item Due";
MailApp.sendEmail(emailAddress, subject, message);
}
}
}
我更新由Srik提供的建議,並在下面的代碼中提供了他的建議。我試圖發表這一段時間,所以我不確定爲什麼它沒有進行同行評審?
function sendEmail() {
var sheet = SpreadsheetApp.getActiveSheet();
var startRow = 2; // First row of data to process
var numRows = 50; // Number of rows to process
var dataRange = sheet.getRange(startRow, 1, numRows, 50);
// Fetch values for each row in the Range.
var data = dataRange.getValues();
//Browser.msgBox(data)
for (i in data) {
var row = data[i];
var date = new Date();
var sheetDate = new Date(row[1]);
if (date.getDate() == sheetDate.getDate() && date.getMonth() == sheetDate.getMonth() && date.getFullYear() == sheetDate.getFullYear());
{
var emailAddress = row[0]; // First column
var message = row[2]; // Second column
var subject = "Sending emails from a Spreadsheet";
MailApp.sendEmail(emailAddress, subject, message);
// Browser.msgBox(emailAddress)
}
}
}
該代碼似乎運行,但我在腳本編輯器中收到以下錯誤w /。 「無法發送電子郵件:沒有收件人(第23行)」。但它仍然發送電子郵件。它應該比較日期,如果日期匹配,則只發送電子郵件。它發送每一行的電子郵件。我分享了電子表格以查看代碼以及如何設置電子表格。 Shared Spreadsheet
更新代碼W/SERGE幫助記錄器和Utilities.formatDate ..謝謝!
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 = "Your assigned task is due today." +message;
MailApp.sendEmail(emailAddress, subject, message);
//Logger.log('SENT :'+emailAddress+' '+subject+' '+message)
}
}
}
好的..好..看起來像正在取得進展..感謝您使用記錄器..如果你注意到Browswer.msgBox評論我試圖自己調試一下。但日誌記錄要好得多。所以看起來目前的日期顯示提前一天。 6/17/2012?當它輸出到日誌2012:06:17 =? 2012:06:15不知道爲什麼它會拉明天的日期,而不是實際的一天..要開始挖掘,並會更新,因爲我發現:) – jjones312
得到它的工作,不知道它的最好或最聰明的方式。我在當前日期使用了.setHours,.setMinutes和setSeconds,現在這些日期與從電子表格中提取的日期相匹配。電子郵件流量恰到好處:)謝謝Serge幫助我解決這個問題。如果有人認爲我加入.setHOurs等方法,請讓我知道。 Javascript對我來說是新鮮事,所以我試圖吸收我可以..再次感謝.. – jjones312
你有問題可能與時區有關,我用GMT + 0200這是適合我,但可能不適合你; - )還請檢查電子表格中的設置。 (檢查舊論壇中關於GAS日期的信息) –