首页 > 解决方案 > 如何检查谷歌 appscript 项目的现有触发器?

问题描述

如何检查谷歌 appscript 项目的现有触发器?

例如。我有类似的代码...

var ss = SpreadsheetApp.getActive();
ScriptApp.newTrigger('onFormSubmit').forSpreadsheet(ss).onFormSubmit().create();

function onFormSubmit(e) {
    do stuff
}

多次运行此代码每次都会生成一个新触发器。有没有办法检查项目的现有触发器以查看我的 onFormSubmit 函数是否已经链接到 onFormSubmit() 事件?

标签: google-apps-script

解决方案


在创建另一个可安装触发器之前,我总是调用这样的函数:

function isTrigger(funcName){
  var r=false;
  if(funcName){
    var allTriggers=ScriptApp.getProjectTriggers();
    for (let i=0;i<allTriggers.length;i++){
      if(funcName==allTriggers[i].getHandlerFunction()){
        r=true;
        break;
      }
    }
  }
  return r;
}

如此处所示:

function createOnEditTriggerForSpreadsheet() {
  const ssid=SpreadsheetApp.getActive().getId();
  const resp=SpreadsheetApp.getUi().prompt("Create On Edit Trigger", "Enter Function Name", SpreadsheetApp.getUi().ButtonSet.OK_CANCEL);
  if(resp.getSelectedButton()==SpreadsheetApp.getUi().Button.OK) {
    let funcname=resp.getResponseText();
    if(!isTrigger(funcname)) {
      ScriptApp.newTrigger(funcname).forSpreadsheet(ssid).onEdit().create();
    }   
  }
}

推荐阅读