谷歌工作表触发电子邮件通知

时间:2017-10-05 15:37:42

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

我试图在特定值(在这种情况下为硫化氢)超过谷歌表上的阈值时设置即时电子邮件通知。

数据的一个例子:

          h2s      VFA
                F1     F2 
01/10/17  555   893    786
02/10/17  456   980    654
03/10/17  205   1021   875
04/10/17
05/10/17
06/10/17  345   987

我有以下工作代码:

function readCell() {
    var sheet = SpreadsheetApp.getActiveSpreadsheet(); 
    var h2s_value = sheet.getRange("B2").getValues();
    if(h2s_value>500) MailApp.sendEmail('emailaddress@gmail.com', 'High 
Hydrogen Sulphide Levels', 'Hydrogen Sulphide levels are greater than 500ppm ' + h2s_value );
};

当我运行代码时,如果B2的值超过500,则会发送电子邮件。我希望每次更新值时自动运行代码,因此如果达到阈值,则会立即发送电子邮件。我尝试使用onChange触发器,但它没有工作。

问题在于,如果我在主电子表格上放置触发器(记录了许多不同参数的长列表),我会收到电子表格上每次更改的电子邮件通知 - 无论它是否相关对于利益与否的价值。所以我创建了另一张表,它总结了当天的单个关键参数。每日关键参数链接到主电子表格,但是当我在主电子表格上进行更改时,脚本无法识别更改,因为值会通过公式中的链接间接更改。

有没有人知道是否有办法创建触发器来响应电子表格上的间接更改?即公式保持不变但值改变的地方。

如果它可以有瞬时触发器,那么这比时间驱动的触发器更受欢迎。

非常感谢任何帮助。

谢谢,

莉莎

--------------------------最新版本------------------- -------------------- 现在我尝试使用多个列来处理代码,包括h2s和VFA(下面的代码只包含VFA的代码),但我还没有能够定义多个e.value而且它似乎只是运行最后一列。是否可以定义多个e.value?

function onEdit (e) {
  var ss = e.source;
  var range = e.range.columnStart;
  var watching_f1 = ss.getRange("Y6:Y");
  var watching_f2 = ss.getRange ("Z6:Z");

  // Only check the f1 values and send emails if cells in col "Y" changes
  if ((watching_f1.getColumn() <= range == range <= watching_f1.getLastColumn())) {
var vfa_f1 = e.values[0];
    if(vfa_f1>2500) {
      MailApp.sendEmail('email@gmail.com', 'High VFAs in Fermenter 1', 'Hi, High VFAs in Fermenter 1. VFA recorded at ' + vfa_f1);
}};

  // Only check the f2 values and send emails if cells in col "Z" changes
  if ((watching_f2.getColumn() <= range == range <= watching_f2.getLastColumn())) {
    var vfa_f2 = e.values[1]; 
    if(vfa_f2>2500) {
     MailApp.sendEmail('email@gmail.com', 'High VFAs in Fermenter 2', 'Hi, High VFAs in Fermenter 2. VFA recorded at ' + vfa_f2);
    }};
  } 

1 个答案:

答案 0 :(得分:0)

除非我误解了这个问题,否则缩小onEdit()触发器运行MailApp.sendEmail()的范围会阻止工作表上的其他单元格编辑发送额外的电子邮件。

function onEdit (e) {
  var ss = e.source;
  var range = e.range.columnStart;
  var watching = ss.getRange("B1:B");

  // Only check the values and send emails if cells in col "B" changes
  if ((watching.getColumn() <= range == range <= watching.getLastColumn())) {
    var h2s_value = e.value; // Use the event object value to save a call to the sheet
    if (h2s_value > 500) {
     MailApp.sendEmail('emailaddress@gmail.com', 'High Hydrogen Sulphide Levels', 'Hydrogen Sulphide levels are greater than 500ppm ' + h2s_value );
    }
  }
}