用于添加计时器的Google脚本

时间:2016-02-22 17:20:20

标签: javascript google-apps-script google-sheets google-apps

我正在尝试创建一个包含2个按钮的Google脚本" start"并且"停止"。点击"开始"将启动一个计时器并点击"停止"将停止计时器。

我知道我无法使用setTimeout或setInterval实现此目的,因此我使用了utilities.sleep(1000)。但是由于谷歌的限制,使用这个我不能执行超过5分钟的功能。

因此我尝试在1秒钟时使用Trigger方法设置,但没有运气。触发根本没有发生。

我正在分享下面的代码,感谢任何帮助。

function onClickStart(){
  startTimer();
}

function startTimer() {
  removeJobs();
  ScriptApp.newTrigger("timer")
  .timeBased()
  .after(1000)
  .create();

  timer();
}

function removeJobs() {    

  PropertiesService.getScriptProperties().deleteAllProperties();
  var triggers = ScriptApp.getProjectTriggers();
  for (i=0; i<triggers.length; i++) {
    ScriptApp.deleteTrigger(triggers[i]);
  }
}

function timer() {
  var seconds = 0, minutes = 0, hours = 0,
    t,stop_time;

  var documentProperties = PropertiesService.getDocumentProperties();
  var timer = documentProperties.getProperty('timer_result');
  Logger.log('get timer: %s', timer);
  if(timer){
    timer = timer.split(':');
    seconds = +timer[2] || 0 ;
    minutes = +timer[1] || 0 ;
    hours = +timer[0] || 0 ;
  }
    seconds++;
    if (seconds >= 60) {
        seconds = 0;
        minutes++;
        if (minutes >= 60) {
            minutes = 0;
            hours++;
        }
    }

    stop_time = (hours ? (hours > 9 ? hours : "0" + hours) : "00") + ":" + (minutes ? (minutes > 9 ? minutes : "0" + minutes) : "00") + ":" + (seconds > 9 ? seconds : "0" + seconds);
    SpreadsheetApp.getActiveSheet().getRange('F7').setValue(stop_time); 
    Logger.log('set timer: %s', stop_time);
    documentProperties.setProperty('timer_result', stop_time);
}

1 个答案:

答案 0 :(得分:0)

每次从触发器调用timer()时,都会创建脚本的唯一实例,并且当执行链完成时,它将被销毁。销毁实例时将删除所有全局变量。所以现在每当触发器被调用时,秒,分钟,小时都被设置为0.

对于实例之间的持久数据,请使用属性服务。 https://developers.google.com/apps-script/reference/properties/