Function 函数,用于在单元格更改为包含“今日”时获取电子邮件通知;谁的日期?

Function 函数,用于在单元格更改为包含“今日”时获取电子邮件通知;谁的日期?,function,google-apps-script,google-sheets,google-apps,Function,Google Apps Script,Google Sheets,Google Apps,如果谷歌工作表中的任何单元格被更改为包含今天的日期(格式为6/7或6/7/16),希望收到电子邮件通知 我对这个很陌生,我搜索了很多,但对编辑功能感到困惑 同样,我应该使用onEdit作为触发器吗 非常感谢任何帮助因为您要使用MailApp类(或GmailApp类),您必须使用可安装的触发器,因为普通的电子表格触发器(onEdit、onChange)不适用于需要身份验证的类 使用可安装的onChange或onEdit触发器,很难知道更改了哪个单元格。你不能只做: function myOnCha

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

我对这个很陌生,我搜索了很多,但对编辑功能感到困惑

同样,我应该使用onEdit作为触发器吗


非常感谢任何帮助因为您要使用MailApp类(或GmailApp类),您必须使用可安装的触发器,因为普通的电子表格触发器(onEdit、onChange)不适用于需要身份验证的类

使用可安装的
onChange
onEdit
触发器,很难知道更改了哪个单元格。你不能只做:

function myOnChange(event){
  event.range; // To get the modified range.
}
这是一个限制。(,)

我有一个非常类似的问题,但我监控的细胞在一个特定的列中。我浏览了一下专栏,看看是否找到了我想要的内容,然后调用其他函数(如果是肯定的话)

看看这段代码,并根据您的情况调整它。非常接近

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;
}
函数onEditTrigger(){
如果(今天TeisonTargetColumn()){
发送邮件('recipient@example.com","主题",replyto@example.com","文本",;
}
}
函数TodaySteisonTargetColumn(){
var range=getSheetByName('Your Sheet Name')。getRange('A1:A');//实际上,您可以在这里使用所需的范围!
var todaysformateddate=Utilities.formatDate(Date.new(),“GMT”,“dd/MM/yy”);
return foundMatchingValueOnRange(范围,todaysFormattedDate);//此函数将查看值(今天的日期)是否在范围内。
}
功能sendEmail(收件人电子邮件、emailSubject、emailReplyTo、emailHtmlBody){
MailApp.sendmail({
收件人:recipientEmail,
主题:电邮主题,,
回复至:电子邮件回复至,
htmlBody:emailHtmlBody
});
}
//UTIL(这些在其他项目中可能很有用)
函数查找匹配ValueOnRange(范围,值){
var foundMatchingValue=false;
var uniqColumnValues=flatten(range.getValues());
var valueIndex=uniqColumnValues.indexOf(值)
如果(valueIndex>=0){
foundMatchingValue=true
}
返回foundMatchingValue;
}
函数展平(矩阵){
返回[]。concat.apply([],矩阵);
}
函数getSheetByName(名称){
var thisSpreadsheet=SpreadsheetApp.getActiveSpreadsheet();
var sheet=thisSpreadsheet.getSheetByName(名称);
报税表;
}
然后,在此之后,您必须在工作表上安装触发器:

在“脚本版本”页面上,转到“资源”>“当前项目的触发器”,然后执行以下操作:

我知道这并不是你想要的,但是谷歌电子表格在触发器和权限一起工作时有一些限制


希望有帮助

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

使用可安装的
onChange
onEdit
触发器,很难知道更改了哪个单元格。你不能只做:

function myOnChange(event){
  event.range; // To get the modified range.
}
这是一个限制。(,)

我有一个非常类似的问题,但我监控的细胞在一个特定的列中。我浏览了一下专栏,看看是否找到了我想要的内容,然后调用其他函数(如果是肯定的话)

看看这段代码,并根据您的情况调整它。非常接近

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;
}
函数onEditTrigger(){
如果(今天TeisonTargetColumn()){
发送邮件('recipient@example.com","主题",replyto@example.com","文本",;
}
}
函数TodaySteisonTargetColumn(){
var range=getSheetByName('Your Sheet Name')。getRange('A1:A');//实际上,您可以在这里使用所需的范围!
var todaysformateddate=Utilities.formatDate(Date.new(),“GMT”,“dd/MM/yy”);
return foundMatchingValueOnRange(范围,todaysFormattedDate);//此函数将查看值(今天的日期)是否在范围内。
}
功能sendEmail(收件人电子邮件、emailSubject、emailReplyTo、emailHtmlBody){
MailApp.sendmail({
收件人:recipientEmail,
主题:电邮主题,,
回复至:电子邮件回复至,
htmlBody:emailHtmlBody
});
}
//UTIL(这些在其他项目中可能很有用)
函数查找匹配ValueOnRange(范围,值){
var foundMatchingValue=false;
var uniqColumnValues=flatten(range.getValues());
var valueIndex=uniqColumnValues.indexOf(值)
如果(valueIndex>=0){
foundMatchingValue=true
}
返回foundMatchingValue;
}
函数展平(矩阵){
返回[]。concat.apply([],矩阵);
}
函数getSheetByName(名称){
var thisSpreadsheet=SpreadsheetApp.getActiveSpreadsheet();
var sheet=thisSpreadsheet.getSheetByName(名称);
报税表;
}
然后,在此之后,您必须在工作表上安装触发器:

在“脚本版本”页面上,转到“资源”>“当前项目的触发器”,然后执行以下操作:

我知道这并不是你想要的,但是谷歌电子表格在触发器和权限一起工作时有一些限制


希望有帮助

编辑OP以包含您尝试编辑的函数。这是excel还是谷歌表格?哇!google sheetEdit操作以包含您尝试编辑的函数。这是excel还是谷歌表格?哇!谷歌表