首页 文章

当脚本被时间触发时,不要运行onOpen

提问于
浏览
0

我有这个谷歌脚本使用onOpen()来设置界面菜单 . 这些菜单触发导入功能:

function onOpen() {
  var ui = SpreadsheetApp.getUi();
  ui.createMenu('Actions')
  .addItem('Refresh', 'refreshData')
  .addToUi();
}

function refreshData() {
  // code that does stuff
}

我还设置了一个时间触发器,每晚运行 refreshData() .

每天早上我收到一封电子邮件,告诉我发生了以下错误: Cannot call SpreadsheetApp.getUi() from this context.

在时间触发器中没有UI是有意义的,但是如何检测我何时触发并阻止此代码运行?

我试过了:

使用 try / catch =>围绕有问题的代码

  • 错误未被捕获

  • 根据当前时间检查这可能是用户打开文件还是时间触发器运行=>似乎无法确定代码运行的时区 .

1 回答

  • 1

    您可以使用event object from time trigger确定该功能是否被用户触发或运行,如下所示:

    function refreshData(e) {
      Logger.log(e)
      if(e == undefined){  //If it was run from the menu e will be undefined.
        var ui = SpreadsheetApp.getUi()
        ui.alert("Not a time trigger")
      }
    
      var ss =SpreadsheetApp.getActive()
      var sheet =ss.getSheetByName("Sheet2")
      var dt = new Date()
      sheet.appendRow([dt.toString(),"Triggered"])
    }
    

相关问题