我环顾四周,看到了一些小零件,但无法将拼图放在一起。我正在尝试创建一个脚本,该脚本将在配置为每天运行的触发器上运行。触发器将在编辑器的“资源”选项下进行设置。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日期的信息) –