如果某个单元格已更改为包含今天的日期,则会收到电子邮件通知的功能吗?

时间:2016-06-08 15:57:52

标签: function google-apps-script google-sheets google-apps

如果谷歌工作表中的任何单元格被更改为包含今天的日期,则会收到电子邮件通知,如6/7或6/7/16等格式。

这是新手,我搜索得很重,但对编辑功能感到困惑。

另外,我应该使用onEdit作为触发器吗?

非常感谢任何帮助< 3

1 个答案:

答案 0 :(得分:0)

当您打算使用MailApp类(或GmailApp类)时,您必须使用可安装的触发器,因为普通的电子表格触发器(onEdit,onChange)不适用于需要身份验证的类。

使用可安装的onChangeonEdit触发器,没有简单的方法可以知道哪个单元格已更改。你不能这样做:

function myOnChange(event){
  event.range; // To get the modified range.
}

这是一个限制。 (simple triggersinstallable 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;当前项目的触发器和操作:

enter image description here

我知道这并不是您正在寻找的内容,但谷歌电子表格在触发器和权限协同工作方面有一些限制!

希望有所帮助!