繁体   English   中英

用于添加计时器的 Google 脚本

[英]Google Script for adding timer

我正在尝试创建一个由 2 个按钮“开始”和“停止”组成的谷歌脚本。 单击“开始”将启动计时器,单击“停止”将停止计时器。

我知道我无法使用 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);
}

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

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

暂无
暂无

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

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