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

时间:2018-01-26 16:55:50

标签: google-apps-script

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

ListView

我还设置了一个时间触发器,每晚运行function onOpen() { var ui = SpreadsheetApp.getUi(); ui.createMenu('Actions') .addItem('Refresh', 'refreshData') .addToUi(); } function refreshData() { // code that does stuff }

每天早上我收到一封电子邮件,告诉我发生了以下错误:refreshData()

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

我试过了:

  • 使用Cannot call SpreadsheetApp.getUi() from this context. / try =>围绕有问题的代码错误未被捕获
  • 根据当前时间检查这可能是用户打开文件还是时间触发器运行=>似乎无法弄清楚代码运行的时区。

1 个答案:

答案 0 :(得分:1)

您可以在时间触发器中使用event object来确定该功能是否由用户触发或运行,如下所示:

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"])
}