[英]Google Apps Script - Send Email based on date in cell
我環顧四周,點點滴滴,但不能把拼圖放在一起。 我正在嘗試創建一個腳本,該腳本將在配置為每天運行的觸發器上運行。 觸發器將在編輯器的Resources選項下設置。
基本上我正在尋找捕獲一系列單元格的腳本,確定到期日期,該日期將填充在一列中,並將其與當前日期相匹配。 如果匹配則發送電子郵件。 我已經開始發送來自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)
}
}
}
代碼似乎運行但我在腳本編輯器中遇到以下錯誤。 “無法發送電子郵件:沒有收件人(第23行)”。 但它仍然會發送電子郵件。 它應該比較日期,只有在日期匹配時才發送電子郵件。 它每行發送一封電子郵件。 我已經分享了電子表格,以查看代碼以及電子表格的設置方式。 共享電子表格
在記錄器和Utilities.formatDate上更新了代碼W / SERGE幫助..謝謝!!
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)
}
}
}
這是您的代碼的工作版本,我使用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();
var sheetDate = new Date(row[1]);
Sdate=Utilities.formatDate(date,'GMT+0200','yyyy:MM:dd')
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[2]; // Second column
var subject = "Sending emails from a Spreadsheet";
// MailApp.sendEmail(emailAddress, subject, message);
Logger.log('SENT :'+emailAddress+' '+subject+' '+message)
}
}
}
別忘了看日志;-)
我會這樣做....
像這樣設置電子表格: https : //docs.google.com/spreadsheet/ccc?key = 0AkGlO9jJLGO8dDJad3VNTkhJcHR3UXlJSVRNTFJreWc
將代碼更改為:
function sendEmails() {
var spreadsheet = SpreadsheetApp.openById('Type spreadsheet key here from spreadsheet URL');
/// e.g. var spreadsheet = SpreadsheetApp.openById('0AkGlO9jJLGO8dDJad3VNTkhJcHR3UXlJSVRNTFJreWc');
var sheet = spreadsheet.getSheets()[0]; // gets the first sheet, i.e. sheet 0
var range = sheet.getRange("B1");
var dateString = new Date().toString();
range.setValue(dateString); // this makes all formulas recalculate
var startRow = 4; // 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, 4)
// Fetch values for each row in the Range.
var data = dataRange.getValues();
for (i in data) {
var row = data[i];
if( row[3] == true) {
var emailAddress = row[0]; // First column
var message = row[1]; // Second column
var subject = "Task Item Due";
try {
MailApp.sendEmail(emailAddress, subject, message);
} catch(errorDetails) {
// MailApp.sendEmail("eddyparkinson@someaddress.com", "sendEmail script error", errorDetails.message);
}
}
}
}
觸發:
由於觸發器,您需要使用openById打開電子表格。 為此,請在代碼中替換“在電子表格網址中鍵入電子表格密鑰”。 要找到密鑰,請打開google docs電子表格,該鏈接有“key = A0a0df ...”粘貼代碼。 查看示例。
JavaScript:如果您想了解有關使用Java Script的更多信息,請參閱http://www.w3schools.com/js/default.asp
您在這里比較兩個不同的對象
if ( currentTime == dataRange) {
currentTime是一個Date對象,而dataRange是一個Range對象 - 它們永遠不會相等,所以沒有任何反應。 你能做的是(DATE_COL是你的日期列)
for ( var i in data ){
var row = data[i] ;
var today = new Date();
var date = new Date(row[DATE_COL]) ;
if (today.getDate() == date.getDate() &&
today.getMonth() == date.getMonth() &&
today.getYear() == date.getYear() {
/* Your email code here */
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.