简体   繁体   English

附加触发器未运行,如何解决

[英]Add-on Trigger not running, how can I troubleshoot

My add-on creates a trigger that runs every hour. 我的附加组件创建了一个每小时运行一次的触发器。 It works when I run it from the script, but it does not seem to work when published as an add-on. 当我从脚本运行它时,它可以工作,但是当作为附件发布时,它似乎不起作用。 I am wondering what is the best way to trouble-shoot this. 我想知道什么是解决此问题的最佳方法。

Below is the script that runs on the hour. 以下是按小时运行的脚本。 Maybe there is something in there that might help figure out what is going on. 也许那里有些东西可能有助于弄清楚发生了什么。

function updateDay(){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheets = ss.getSheets(); 

  for (i in sheets){
    var sheetName = sheets[i].getName();
    var cella2 = sheets[i].getRange(1, 2).getValue();
    if (sheetName == cella2){

      //check if weekend
      var cellA3 =  new Date(sheets[i].getRange(3, 1).getValue());
      if (cellA3 == "-"){
        sheets[i].deleteRow(3);
        SpreadsheetApp.flush();
        cellA3 =  new Date(sheets[i].getRange(3, 1).getValue());
      }

      var cellA3F = Utilities.formatDate(cellA3, "EST", "MM/dd/yyyy");
      var today = new Date();
      var todayF = Utilities.formatDate(today, "EST", "MM/dd/yyyy");

      if (cellA3F < todayF){

        //write to Log
        var sendToLog = [];
        var logSheet = ss.getSheetByName("Log");
        var logDate = sheets[i].getRange("A3").getValue();
        var sheetLastColumn = sheets[i].getLastColumn();

        sendToLog.push(logDate);
        sendToLog.push(sheetName);
        for (var j=2; j<sheetLastColumn+1; j++){
          var colHeading = sheets[i].getRange(2, j).getValue();
          var colName = sheets[i].getRange(3, j).getValue();
          sendToLog.push(colHeading+":"+colName);
        }

//        ["12/16/14","Lab1","Per1:bj","Per2:Sara"];
        logSheet.appendRow(sendToLog);

        //add new day
        var lastDay =  new Date(sheets[i].getRange(sheets[i].getLastRow(), 1).getValue());
        var dayOfWeek = Utilities.formatDate(lastDay, "EST", "EEE");
        if (dayOfWeek == 'Fri'){
          var nextMon = new Date(lastDay);// This needs to be two lines for some reason.
          nextMon.setDate(lastDay.getDate()+3);
          sheets[i].appendRow(["-"]);
          sheets[i].appendRow([nextMon]);
        } else{
          var nextDay = new Date(lastDay);// This needs to be two lines for some reason.
          nextDay.setDate(lastDay.getDate()+1);
          sheets[i].appendRow([nextDay]);
        }
        sheets[i].getRange("a:a").setNumberFormat('DDD, MM/dd');

        //remove tody
        var dayOfWeek2 = Utilities.formatDate(cellA3, "EST", "EEE");
        if (dayOfWeek2 == 'Fri'){
          sheets[i].deleteRow(4);
        }
        sheets[i].deleteRow(3); 
      }
    }
  }
  // for testing
  SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Log").getRange(1,4,1,2).setValues([["Last Update", new Date()]]);
}

And here is the code that I use to create the trigger. 这是我用来创建触发器的代码。

  //  Configure trigger
  var projectTriggers = ScriptApp.getProjectTriggers();
  if (projectTriggers.length == 0){
    ScriptApp.newTrigger('updateDay').timeBased().everyHours(1).create();
  }

You don't want to use project triggers (these are set at project scope) with an add on... you need to use user triggers instead, which are set at 1 per Add-on per document instance. 您不希望将项目触发器(这些触发器在项目范围内设置)与插件一起使用...而是需要使用用户触发器,将其设置为每个文档实例每个插件1个。 Add-ons user triggers are limited to clock and form types, and follow a different set of rules, including reduced frequency of time triggers (max 1x per hour), and they are limited to only one trigger per type per user per doc. 加载项用户触发器仅限于时钟和表单类型,并遵循一组不同的规则,包括降低时间触发器的频率(每小时最多1次),并且每个文档每个用户每种类型仅限一种触发器。

对于插件,您需要以编程方式创建触发器,在这里可以找到实现该触发器的文档和示例: https : //developers.google.com/apps-script/guides/triggers/installable#managing_triggers_programmatically

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM