当单元格内容由于forumula从另一个工作表编译数据而更改时发送电子邮件

Send email when cell content is changed due to forumula compiling data from another sheet

本文关键字:数据 编译 电子邮件 工作 单元格 另一个 forumula      更新时间:2023-09-26

当单元格发生更改时,我需要谷歌电子表格来发送电子邮件。

问题是,这个单元格中显示的内容是由另一张表的值决定的(我为此使用了if和filter函数)。

通常,

if(cell.indexOf('F')!=-1){    
    MailApp.sendEmail(emailAddress, subject, message);
}

似乎没有捕捉到单元格中的变化,因为变化是由从另一张表中编译数据的公式引起的,然而,如果我在F栏中手动键入内容,它确实会给我发一封电子邮件。

以下是我在脚本编辑器中的全部代码:

function Initialize() {
  var triggers = ScriptApp.getProjectTriggers();
  for(var i in triggers) {
    ScriptApp.deleteTrigger(triggers[i]);
  }
  ScriptApp.newTrigger("sendNotification")
  .forSpreadsheet(SpreadsheetApp.getActiveSpreadsheet())
  .onEdit()
  .create();
};
function sendNotification(e) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  var cell = ss.getActiveCell().getA1Notation();
  var dataRange = sheet.getRange(2, 1, 2, 2);
  var data = dataRange.getValues();
  for (i in data) {
    var row = data[i]
    var emailAddress = row[0];
    var message = row[1];
    var subject = "Job exceeded time allocated";
    if(cell.indexOf('F')!=-1){
      MailApp.sendEmail(emailAddress, subject, message);
    }
  }
}
  1. 这里讨论了如何使用公式从单元格中提取值:

获取和设置单元格的值不起作用基本上-getCell()返回一个Range对象。。您需要添加.getValue()方法来获取您试图在脚本中执行的范围内的单元格的值。我发现将getRange与单元格地址一起使用效果要好得多:即getRange('B1')

  1. getCell的设计目的不是返回单元格的值,而是返回单元格的Range对象,如下所述:

尝试使用Google Script API 读取电子表格中的单元格1,1

单元格对象是一个公式,所以你真的不想要它。因此,使用getRange意味着您可以在一个单元格中获得公式结果的范围。

听起来我知道的比我做的多。我自己偶然发现了这个问题,并如上所述解决了它。