google-apps-script - onEdit 简单触发器似乎永远不会被触发

标签 google-apps-script google-sheets triggers

我一直在使用 OnEdit 一段时间并且它工作得很好 - 但是刚才我遇到了一个问题 - 基本上当第 6 (f) 列被编辑时,我希望它检查值 - 如果它是“进行中”我想要然后它运行一个函数来发送电子邮件,当我调试它时 - 它完全按照我的意愿工作,但是当我不调试时,它似乎永远不会运行。

var summary = ss.getSheetByName("Summary")
var data = summary.getRange(4, 1, summary.getLastRow(), summary.getLastColumn());
var learnerObjects = getRowsData(summary, data);
var lastrow = summary.getLastRow();

function onEdit(e){
  var sheet = e.source.getActiveSheet();
  var CellRow = sheet.getActiveRange().getRow();
  var CellColumn = sheet.getActiveRange().getColumn();

  if (sheet.getSheetName() == "Summary"){
    if (CellColumn == 6){
      var learner = learnerObjects[CellRow-4];
      var status = learner.status;
      if (status == "In Progress"){
        var enrolmentdate = learner.enrolmentDateDdmmyyyy;
        var surname = learner.surname;
        var firstname = learner.firstName;
        var qualification = learner.qualification;
        var company = learner.company;
        messagePT3 = firstname + " " + surname + " from " + company + " doing " + qualification + " has been added to your tracker.";
        sendTrackerEmail(messagePT3);
        SpreadsheetApp.getActiveSpreadsheet().toast('Email has been sent to Assessor regarding new learner', 'Assessor Notified', 3);
      }
    }
  }
}

这是它的主要代码,当我说调试时它工作正常,但是当我不调试时它似乎永远不会被触发,有没有其他方法可以做到这一点?

我对 F 列进行了数据验证,但是这将单元格限制为“已完成”、“撤回”、“暂停”或“进行中”——这不应该有影响吗?

我知道 onEdit 正在被触发,因为我使用它来监视电子表格某些部分的更改。

最佳答案

onEdit() 触发器是所谓的“简单触发器”,其作用域有限。
由于它在事件用户的授权下自动和静默运行,因此它不能做任何需要授权的事情,例如它不能发送电子邮件!

解决方案很简单:将您的函数名称更改为其他名称(例如 myOnEdit)并设置一个可安装的 onEdit 触发器来运行该函数。(菜单资源/当前脚本触发器/在脚本编辑器中创建新触发器。)

这一次,当有人编辑电子表格时,它将像您一样执行(您将发送电子邮件)。

关于该主题的文档是 available here

关于google-apps-script - onEdit 简单触发器似乎永远不会被触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22333232/

相关文章:

Google 电子表格中的 JavaScript

debugging - Google Analytics 跟踪错误 - 无法识别的位置参数页面浏览量和跟踪脚本已加载。放弃初始化

google-apps-script - 在 onFormSubmit 触发器中获取 TypeError?

wpf - Label 和 GroupBox 触发器不起作用,相同的触发器适用于 StackPanel

javascript - 检查电子邮件是否具有特定域

google-apps-script - 如何在 Google Apps 脚本 (Google Drive API) 中向 blob 添加/附加字符串

csv - 将 Google Sheet CSV 传输到 Dropbox 的编程方式

python - 每次添加新的 Google Sheet 行时都会触发 AWS Lambda

postgresql - postgresql中的自定义自增字段(发票/订单号)

c# - 每当通过 Web 应用程序将记录插入 SQL Server 时,触发 winforms 程序运行