【问题标题】:Get value from formula cell to trigger email sending从公式单元格中获取值以触发电子邮件发送
【发布时间】:2019-12-10 07:05:07
【问题描述】:

我正在尝试在包含公式的单元格中的值低于某个数字时发送一封电子邮件。

对于手动输入单元格值的其他各种电子表格,我已经实现了这一点,但是对于单元格上的值来自简单的 SUM 公式的这张特定的表格,电子邮件没有被发送。现在,如果我在单元格中手动输入值,电子邮件会立即发送。

以下是代码,这是我的电子表格的副本:

https://docs.google.com/spreadsheets/d/1gnmJfkmIKHyNqLqTFK-bdOZnh2Ejkia6xo3r_3cjwkk/edit?usp=sharing

function CheckBasketsInventory(e) {
  var ss = e.source;
  var inventorySheet = ss.getSheetByName("Baskets");
  var rowIndex = e.range.getRow();
  var columnIndex = e.range.getColumn();
  var numCols = 11;
  var row = inventorySheet.getRange(rowIndex, 1, 1, numCols).getValues()[0];
  var editedInventory = row[10];
  var editedMinimum = row[8];
  var sheetName = ss.getActiveSheet().getName();
  // Checking that: (1) edited cell is an inventory quantity, and (2) Inventory is below minimum
  if(editedInventory <= editedMinimum && sheetName == "Baskets" && columnIndex == 11 && rowIndex > 1) {
    var inventoryValues = inventorySheet.getDataRange().getValues();
    var emailBody = "";
    for(var i = 1; i < inventoryValues.length; i++) {
      var inventory = inventoryValues[i][10];
      var minimum = inventoryValues[i][8];
      if(inventory <= minimum) {
        var productName = inventoryValues[i][0] + " " + inventoryValues[i][1] + " " + inventoryValues[i][2];
        var productUnits = minimum + " " + inventoryValues[i][9];
        var messagePart1 = "Inventory for " + productName + " has gone under " + productUnits + ". ";
        var messagePart2 = "Organise purchase order. Inventory as of today is: " + inventory + " " + inventoryValues[i][9];
        var message = messagePart1.concat(messagePart2);
        var newItem = "<p>".concat(message, "</p>");
        emailBody += newItem;
      }
    }
    var emailSubject = "Low inventory alert";
    var emailAddress = "danielrzg@gmail.com";
    // Send Alert Email
    if(emailBody != "") {
      MailApp.sendEmail({
        to: emailAddress,
        subject: emailSubject,
        htmlBody: emailBody
      });  
    }
  }
}

谢谢。

【问题讨论】:

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


    【解决方案1】:

    正如您在documentation 中看到的:

    脚本执行和 API 请求不会导致触发器运行。为了 例如,调用 FormResponse.submit() 提交一个新的表单响应 不会导致表单的提交触发器运行。

    这包括由不触发onEdit 触发器的工作表公式编辑的值。

    【讨论】:

    • 我尝试将触发器更改为onChange,但它仍然不起作用,有什么可能的解决方案?
    • 触发器不可能。唯一的解决方案是将之前的值保存在某处,然后每 x 分钟运行一次脚本来检查值是否发生了变化。
    • 如果我将公式从电子表格转移到脚本会怎样?例如,我可以将库存值设为:D + E + F + G + H 硬编码在脚本本身中,而不是从 K 列获取 Inventory 采购的值,这反过来又小于或等于最低限度会在编辑时激活触发器。这行得通吗?
    • 不,只有在用户手动更改工作表时才能激活 onEdit 触发器。
    猜你喜欢
    • 2022-01-15
    • 1970-01-01
    • 2010-11-26
    • 2014-06-22
    相关资源
    最近更新 更多