Google 应用脚本无法仅针对特定 sheet 和之前为空的单元格发送通知

Google App Script unable to send notification only for specific sheet and previously empty cell

我是 Google 脚本的新手,我正在尝试创建此脚本,当有新请求填充到特定选项卡和列时,它会向 Messenger 应用程序发送通知。

所以选项卡的名称是“其他请求”,只有当 B 列“请求编号”中的单元格被填充时,才会触发通知。编辑填充的单元格时不应触发通知。

我设法让触发器只发生在 B 列上。但是,即使我已经在脚本中指定了选项卡“其他请求”,当编辑其他选项卡的 B 列时也会发生触发器。此外,当编辑 B 列中的填充单元格时,它还会触发通知。我可以知道脚本中出了什么问题吗?我搜索了很多类似的问题来寻找答案,但 none 成功了。

提前致谢!

function API() {

  var cell = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Additional Requests").getCurrentCell();
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("Additional Requests");
  var columnofCellEdited = cell.getColumn();
  if ((sheet.getSheetName() === "Additional Requests") && (columnofCellEdited === 2)) {
    if((cell.value !== null) && (cell.oldValue == null)) {
      var payload = JSON.stringify({
        "tag": "text",
        "text": {
          "content": "--",
          "email_list": ["--@123.com"],
          "at_all": false
        }
      });

您需要使用event object并检查编辑范围:

Simple triggers and installable triggers let Apps Script run a function automatically if a certain event occurs. When a trigger fires, Apps Script passes the function an event object as an argument, typically called e. The event object contains information about the context that caused the trigger to fire.

然后您可以使用传递给编辑函数的事件对象来获取有关已编辑单元格的信息:

function API(e) {
  var cell = e.range
  var ss = e.source.getActiveSpreadsheet()
  var sheet = ss.getSheetByName("Additional Requests")
  var editedSheet = ss.getActiveSheet()
  var columnofCellEdited = cell.getColumn()

  if (editedSheet.getName() === "Additional Requests") {
    if (columnofCellEdited === 2) {
      if (cell.value !== null && cell.oldValue == null) {
        /*
         * Your onEdit() code goes here
         */
      }
    }
  }
}

您没有做的事情是检查 active sheet 是否称为“其他请求”,但是如果 sheet您手动获得的是 - 它永远都是。

这还假定您的 API() 方法已在可安装的 onEdit 触发器上运行。