我目前正在尝试使用谷歌电子表格创建我工作场所经常使用的一些产品的库存。此外,我正在尝试提供一个脚本,当某个产品达到低于2的值时会向我发送电子邮件,以便我知道某个产品需要重新进货。我不知道编码的基础知识,但这是我到目前为止所得到的:
function readCell() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Sheet1");
var ProductA = sheet.getRange("B2").getValue();
var Product B = sheet.getRange("B3").getValue();
var min = 2
if (ProductA<min) MailApp.sendEmail('n********@googlegroups.com', 'LOW REAGENT STOCK', 'Attention! Your stock of ProductA is running low. Please proceed to restock.');
if (ProductB<min) MailApp.sendEmail('n********@googlegroups.com', 'LOW REAGENT STOCK', 'Attention! Your stock of ProductB is running low. Please proceed to restock.');
}
我将触发器放在onEdit上运行脚本,我打算用更多产品扩展列表。问题是,如果一个产品已经达到低于2的值并且如果更改了另一个,则脚本将为它们发送电子邮件。随着更多的产品,这将成为一个麻烦,因为如果其他值保持低于2,我会收到一堆电子邮件。有人可以帮我解决这个问题吗?到目前为止,我找不到任何解决方案,我真的很感激一些帮助。
谢谢!
答案 0 :(得分:0)
当“onEdit”触发器触发时,它会接收事件对象作为参数,其中包含有关上下文的一些有用信息,其中发生了编辑操作。
例如,
function onEdit(e) {
// range that was edited
var range = e.range;
//value prior to the edit action
var oldValue = e.oldValue;
//new value
var value = e.value;
//sheet the action came from
var sheet = range.getSheet();
//cell coordinates (if edited range is a single cell)
//or the upper left boundary of the edited range
var row = range.getRow();
var col = range.getColumn();
}
您可以检查事件对象以获取已编辑的单元格,并查看它是否在B列中。
var productsColIndex = 1; //column A index;
var inventoryColIndex = 2; //column B index
var range = e.range;
var value = e.value;
var sheet = range.getSheet();
var editedRow = range.getRow();
var editedCol = range.getColumn();
var productName = sheet.getRange(editedRow, productsColIndex).getValue();
//checking if
//1) column B was edited
//2) the product exists in column A
//3) new value is less than 2
if ((editedCol == inventoryColIndex) && productName && value < 2) {
//code for sending notification email.
}
最后,因为像onEdit()这样的简单触发器无法调用需要授权的服务,所以最好创建一个具有不同名称的函数,然后手动设置可安装的触发器。在“脚本编辑器”中,转到“编辑” - &gt; “当前项目的触发器” - &gt; “添加新触发器”,从下拉列表中选择您的功能名称,然后选择以下选项:“从电子表格”,“在编辑时”。