google-apps-script - 谷歌表格电子邮件提醒,如果到期日期
问题描述
我有一个包含 8 列日期的表格。如果它们要过期,我需要跟踪它们,但对于其中的 3 个,我需要在 3 个月前发出警报,而对于其余列,在 6 个月前发出警报。
我认为我使用下面的代码走在正确的轨道上,但仍然没有做需要做的事情。
我从一开始的一个月开始。有人可以帮助我吗?
function emailAlert() {
// today's date information
var today = new Date();
var todayMonth = today.getMonth() + 1;
var todayDay = today.getDate();
var todayYear = today.getFullYear();
var newToday = new Date()
var oneMonthFromToday = new Date(newToday.setMonth(newToday.getMonth()+1));
var oneMonthMonth = oneMonthFromToday.getMonth() + 1;
var oneMonthDay = oneMonthFromToday.getDate();
var oneMonthYear = oneMonthFromToday.getFullYear();
var sheet = SpreadsheetApp.getActiveSheet();
var startRow = 2;
var numRows = 100;
var dataRange = sheet.getRange(startRow, 1, numRows, 999);
var data = dataRange.getValues();
//looping through all of the rows
for (var i = 0; i < data.length; ++i) {
var row = data[i];
var expireDateFormat = Utilities.formatDate(
new Date(row[6]),
'ET',
'MM/dd/yyyy'
);
var subject = '';
var message = ' You have expiring pass. ' + '\n';
MailApp.sendEmail('lubomira.petkova88@gmail.com', subject, message);
}
解决方案
您的帖子尚不清楚,但下面的代码假设只需要检查 1 列。随意调整条件,但这应该是您代码的主要思想。
代码:
function checkPasswordExpiry() {
// today's date information
var today = new Date();
today.setHours(0,0,0,0);
// 3 months before
var prev3Months = new Date();
prev3Months.setMonth(today.getMonth() - 3);
prev3Months.setHours(0,0,0,0);
// 6 months before
var prev6Months = new Date();
prev6Months.setMonth(today.getMonth() - 6);
prev6Months.setHours(0,0,0,0);
var sheet = SpreadsheetApp.getActiveSheet();
var startRow = 2;
// get number of rows/columns in sheet instead of manually setting it
var numRows = sheet.getLastRow();
var numCols = sheet.getLastColumn();
var dataRange = sheet.getRange(startRow, 1, numRows, numCols);
var data = dataRange.getValues();
//looping through all of the rows
for (var i = 0; i < data.length; ++i) {
var row = data[i];
var expireDateFormat = Utilities.formatDate(
new Date(row[6]),
'ET',
'MM/dd/yyyy'
);
var date = new Date(row[6]);
date.setHours(0,0,0,0);
var subject = 'Password Expiry';
var message = 'Hi ' + row[0] + ', \nYour password is expiring';
var email = 'lubomira.petkova88@gmail.com';
if(date.getTime() === prev6Months.getTime()) {
message += " in 6 months. ( " + expireDateFormat + " )";
MailApp.sendEmail(email, subject, message);
}
else if(date.getTime() === prev3Months.getTime()) {
message += " in 3 months. ( " + expireDateFormat + " )";
MailApp.sendEmail(email, subject, message);
}
else if(date.getTime() === today.getTime()) {
message += " today. ( " + expireDateFormat + " )";
MailApp.sendEmail(email, subject, message);
}
}
}
上面的代码会检查 G 列是否已经是今天之前的 6 个月、今天之前的 3 个月或确切的日期。如果您需要检查多个列,只需替换里面的条件,它应该仍然有效。
电子邮件示例:
请注意,上面的代码应该每天触发,以便它可以每天检查数据。
代码:
function createTimeDrivenTriggers() {
ScriptApp.newTrigger('checkPasswordExpiry')
.timeBased()
.everyDays(1)
.atHour(0)
.create();
}
函数createTimeDrivenTriggers
只需要运行一次。请参阅下面的参考。
参考:
如果我无法为您提供您希望的答案,我深表歉意。请随时在下面评论需要进行哪些更改。
推荐阅读
- r - 在 R 中创建一个组合数据帧的 for 循环
- oauth - 在未登录浏览器连接 Instagram 时,OAuth Instagram API 删除重定向 URL 中的参数
- jmeter - JMeter NTLM,应该包括哪个请求?
- r - 将 javascript 添加到闪亮的模块中
- c++ - Is there a way to pass lambda expression as a predicate template argument?
- java - OpenClover - 开始使用 AspectJ
- r - Running mean with condition in R?
- javascript - 将数组作为输入传递给组件/函数
- r - Julia 的包中是否有 rep() 函数?
- c# - 使用 C# 检索远程计算机的进程信息