我试图在特定值(在这种情况下为硫化氢)超过谷歌表上的阈值时设置即时电子邮件通知。
数据的一个例子:
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);
}};
}
答案 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 );
}
}
}