【问题标题】:Stock Inventory - Send email when cell value < 2 (Google Spreadsheet)库存 - 当单元格值 < 2 时发送电子邮件(Google 电子表格)
【发布时间】:2018-02-05 14:38:50
【问题描述】:

我目前正在尝试使用谷歌电子表格创建一些在我的工作场所经常使用的产品的库存。此外,我正在尝试编写一个脚本,当某个产品的值低于 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 以下,我会收到一堆电子邮件。有人可以帮我解决这个问题吗?到目前为止,我找不到任何解决方案,非常感谢您的帮助。

谢谢!

【问题讨论】:

    标签: email google-apps-script google-sheets sendmail inventory-management


    【解决方案1】:

    当“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() 这样的简单触发器不能调用需要授权的服务,所以最好创建一个不同名称的函数,然后手动设置可安装触发器。在您的脚本编辑器中,转到“编辑”->“当前项目的触发器”->“添加新触发器”,从下拉列表中选择您的函数名称,然后选择以下选项:“来自电子表格”、“编辑时” .

    【讨论】:

    • 谢谢!这实际上有效。关键是我想发送一封包含上述信息以及产品名称的电子邮件。在邮件应用命令中:MailApp.sendEmail('n********@googlegroups.com', 'LOW REAGENT STOCK', '注意!您的 ProductA 库存不足。请继续补货。') ;我希望包含“ProductA”的部分包含产品名称。你知道怎么做吗?
    • 将产品名称分配给变量“productName”后,您可以像这样连接: var message = "Your stock of " + productName + " is running low"; MailApp.send(电子邮件、主题、消息);
    • 很高兴我能帮上忙
    猜你喜欢
    • 2014-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-06
    相关资源
    最近更新 更多