由于公式编译来自另一个工作表的数据而更改单元格内容时发送电子邮件

时间:2015-04-01 01:51:24

标签: javascript google-sheets

我需要Google电子表格才能在细胞发生变化时发送电子邮件。

问题是,此单元格中出现的内容是由另一张表格的值决定的(我使用if和过滤器函数)。

通常,

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

似乎没有捕获单元格中的更改,因为更改是由编译来自另一个工作表的数据的公式引起的,但是,如果我要手动输入F列中的内容,它会向我发送电子邮件。 / p>

以下是我在脚本编辑器中的完整代码:

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 个答案:

答案 0 :(得分:0)

  1. 讨论了如何使用公式从单元格中提取值:
  2. get and set Value of a Cell do not work 基本上 - getCell()返回一个Range对象..您需要添加.getValue()方法来获取您尝试在脚本中执行的范围内的单元格的值。我发现使用带有单元格地址的getRange效果更好:即 getRange('B1')。

    1. getCell的目的不是返回单元格的值,而是返回单元格的Range对象,如下所述:
    2. Trying to read cell 1,1 in spreadsheet using Google Script API

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

      这听起来比我知道得多。我自己偶然发现了这个问题并按照上面的说明进行了修复。