[英]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.