我想创建一个包含事件触发器的Google表格。我正在使用Google Apps脚本。
感谢Stack Overflow,当用户修改单元格时,我成功创建了带有自动邮件通知的Google表格。
现在我想知道当单元格被修改(不是用户的修改)时,这是否可行,例如:
if (today() >= B3 ; "late" ; "not late")
该功能检查日期,并将结果“迟到”或“不迟到”。
当达到截止日期时,该功能将“迟到”返回,并会发送一封邮件警告我。正文邮件将具有B,D和E列中单元格的值以及修改单元格的同一行(我知道如何使用e.source,getRange
和getRow
执行此操作)
到目前为止,我已经尝试了这个,但它无法正常工作
function sendNotification(e) {
if("F" == e.range.getA1Notation().charAt(0)) {
if(e.value == "Late") {
//Define Notification Details
var recipients = "user@example.com";
var subject = "Deadlines" ;
var body = "deadline reached";
//Send the Email
MailApp.sendEmail(recipients, subject, body);
}
}
}
如果F列中的单元格具有“延迟”值(“迟”是函数的结果),如何设置邮件通知?
答案 0 :(得分:1)
您可以使用在计时器触发器上运行的简单脚本,并检查工作表中特定列的任何修改。
我使用这样的脚本执行很多任务,包括日历和工作表监控。
下面是一个适用于F列的测试代码,您必须手动运行一次以创建我用来检测更改的scriptProperties值。
然后创建一个时间触发器,每小时运行一次或任何其他有用的计时器值。
唯一的问题是如果你有一张很长的纸张,你可以达到属性的长度限制......(现在我不记得最大长度,必须检查; - )
function checkColumnF() {
var sh = SpreadsheetApp.getActiveSheet();
var values = sh.getRange('F1:F').getValues().join('-');
if(PropertiesService.getScriptProperties().getKeys().length==0){ // first time you run the script
PropertiesService.getScriptProperties().setProperty('oldValues', values);
return;
}
var oldValues = PropertiesService.getScriptProperties().getProperty('oldValues').split('-');
var valuesArray = values.split('-');
while (valuesArray.length>oldValues.length){
oldValues.push('x'); // if you append some rows since last exec
}
Logger.log('oldValues = '+oldValues)
Logger.log('current values = '+valuesArray)
for(var n=0;n<valuesArray.length;n++){
if(oldValues[n] != valuesArray[n]){ // check for any difference
sendMail(n+1,valuesArray[n]);
}
}
PropertiesService.getScriptProperties().setProperty('oldValues', values);
}
function sendMail(row,val){
Logger.log('value changed on row '+row+' value = '+val+' , mail sent');
// uncomment below when you are sure everything runs fine to avoid sending dozens of emails while you test !
//MailApp.sendEmail(Session.getActiveUser().getEmail(),'value changed in your sheet','Row '+row+' is now '+val);
}