如果谷歌工作表中的任何单元格被更改为包含今天的日期,则会收到电子邮件通知,如6/7或6/7/16等格式。
这是新手,我搜索得很重,但对编辑功能感到困惑。
另外,我应该使用onEdit作为触发器吗?
非常感谢任何帮助< 3
答案 0 :(得分:0)
当您打算使用MailApp类(或GmailApp类)时,您必须使用可安装的触发器,因为普通的电子表格触发器(onEdit,onChange)不适用于需要身份验证的类。
使用可安装的onChange
或onEdit
触发器,没有简单的方法可以知道哪个单元格已更改。你不能这样做:
function myOnChange(event){
event.range; // To get the modified range.
}
这是一个限制。 (simple triggers,installable triggers)
我有一个非常类似的问题,但是我监控的单元格位于特定的列中。我查看专栏,看看我是否找到了我想要的内容,然后如果这是正面的话,我会调用其他功能。
查看此代码并根据您的情况进行调整。非常接近!
function onEditTrigger(){
if(todaysDateIsOnTargetColumn()){
sendMail('recipient@example.com', 'Subject', 'replyto@example.com', '<p>text</p>' );
}
}
function todaysDateIsOnTargetColumn(){
var range = getSheetByName('Your Sheet Name').getRange('A1:A'); // in fact, here you can use the range you want!
var todaysFormattedDate = Utilities.formatDate(Date.new(), "GMT", "dd/MM/yy");
return foundMatchingValueOnRange(range, todaysFormattedDate); // This function will see if the value (today's date) is inside the range.
}
function sendEmail(recipientEmail, emailSubject, emailReplyTo, emailHtmlBody) {
MailApp.sendEmail({
to: recipientEmail,
subject: emailSubject,
replyTo: emailReplyTo,
htmlBody: emailHtmlBody
});
}
// Utils (these can be useful in other projects)
function foundMatchingValueOnRange(range, value){
var foundMatchingValue = false;
var uniqColumnValues = flatten(range.getValues());
var valueIndex = uniqColumnValues.indexOf(value)
if(valueIndex >= 0){
foundMatchingValue = true
}
return foundMatchingValue;
}
function flatten(matrix){
return [].concat.apply([], matrix);
}
function getSheetByName(name){
var thisSpreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet = thisSpreadsheet.getSheetByName(name);
return sheet;
}
然后,在此之后,您必须在工作表上安装触发器:
在脚本版页面上,访问了资源&gt;当前项目的触发器和操作:
我知道这并不是您正在寻找的内容,但谷歌电子表格在触发器和权限协同工作方面有一些限制!
希望有所帮助!