Google Apps 脚本 - 根据单元格中的日期发送电子邮件
Google Apps Script - Send Email based on date in cell
我环顾四周,有一些零碎的东西,但无法将拼图放在一起。 我正在尝试创建一个脚本,该脚本将在配置为每天运行的触发器上运行。 触发器将在编辑器中的资源选项下设置。
基本上,我正在寻找脚本来捕获一系列单元格,确定截止日期,该日期将填充在一列中,并将其与当前日期匹配。 如果匹配,则发送电子邮件。 我从Google的电子表格发送电子邮件教程开始。 我已经添加了 if 语句来检查日期,但我在与 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 行)"。 但它仍然发送电子邮件。 它应该比较日期,并且仅在日期匹配时才发送电子邮件。 它为每一行发送电子邮件。 我已经分享了电子表格以查看代码以及电子表格的设置方式。 共享电子表格
更新了记录器和实用程序上的带有 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 打开电子表格。 为此,请在代码中替换"从电子表格 URL 在此处键入电子表格密钥"。 要查找密钥,请打开 google 文档电子表格,链接包含"key=A0a0df..."粘贴代码。请参阅示例。
JavaScript: 如果你想了解更多关于使用Java脚本的信息,我建议 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 */
}
}
- 如果我在javascript中输入无效的电子邮件或空白,如何显示特定的文本框边框红色
- 使用angularjs验证文本框中的电子邮件
- 使用正则表达式评估电子邮件地址时出现性能问题
- javascript中添加验证电子邮件的问题
- 如何在收到电子邮件时自动调用脚本
- 获取屏幕截图并在电子邮件中发送的按钮
- 将项目履行与高级模板合并,并通过电子邮件发送至Netsuite 2.0
- php&js-将电子邮件添加到输入文本中
- 将用户制作的SVG(raphael.js)发送到服务器(php),以便通过电子邮件发送
- 以PDF附件的形式通过电子邮件发送谷歌文档
- 将Meteor中的base64 PDF作为电子邮件附件
- 来自现场目的的Meteor电子邮件.send()
- Google Apps 脚本 - 根据单元格中的日期发送电子邮件
- 流星按日期和时间发送电子邮件
- 如何通过比较日期来生成电子邮件警报
- JavaScript日期转换从Outlook电子邮件
- 日期选择器javascript和电子邮件检查ajax java脚本错误
- 如何控制从电子表格中读取的日期格式,并在电子邮件中显示为表格
- Google-app-script:在电子表格中使用单元格行[]的javascript电子邮件正文中的日期格式问题
- 右键单击浏览器时的电子邮件日期分析器