活跃的倒数计时器 - Googlesheet脚本

时间:2018-03-31 22:31:12

标签: javascript google-sheets-api

在我目前的问题上,我真的需要你的建议。

背景

项目更新每周一上午07:00进行。该项目是在Googlesheets上设置的。我想在Googlesheets上设置一个活动计时器,告诉用户下一次更新需要多长时间。

问题

如果我设置一个GAS代码来执行倒数计时器,它只会在它到达倒计时时才会工作。我真正想要的是倒数计时器,每次达到目标时重启到下一周。例如如果它现在倒计时到下个星期一04年4月2日上午07:00,它应该在4月2日凌晨07:00结束时开始倒计时到4月9日07:00 ....

解决方案

所以我想到的一个简单的解决方案是设置一个简单的倒数计时器,它完全按照我刚才在googlesheet中描述的那样...只是因为我不确定如何在GAS中进行...

然后使用GAS我使用以下代码显示带有从Googlesheet获取的倒数计时器的祝酒词:

function onOpen() {
     Utilities.sleep(1000); //initiate after 1 second from opening the sheet
     var sApp = SpreadsheetApp.getActiveSpreadsheet();   var Sheet = sApp.getSheetByName("Sheet3");
     var Timer = Sheet.getRange("E2").getValue(); //grabbing countdown timer set up on sheet.
     SpreadsheetApp.getActiveSpreadsheet().toast('Until next update', Timer, 3000); //displaying toast for 3 seconds
     SpreadsheetApp.flush(); //flushing data when over.
      }

问题是,它没有刷新......这显示了我将代码放在一起并没有主动向我显示实际剩余时间的剩余时间。

问题

所以我对你们的问题是:

(1)为什么会这样?

(2)是否可以将自动重启的活动倒数计时器放入GAS中的下一周而不是我的复杂方法?

非常感谢

1 个答案:

答案 0 :(得分:0)

当通过GAS访问时,某些表函数表现得很奇怪,特别是那些在没有用户输入的情况下更新的函数。我建议将此报告为错误。

这段代码应该做你想要的。我主要使用https://www.w3schools.com/js/js_date_methods.asp来记住日期在JS中是如何工作的。 the setDate()函数非常智能,如果你给它足够高或负值,它会正确地改变月份甚至年份。我使用switch / case语句将日期代数分解为更简单的情况。

function onOpen(e){
var now = new Date();
  var then = new Date();
  then.setHours(7);
  then.setMinutes(0);
  switch(now.getDay()){
    case 0:
      then.setDate(then.getDate()+1);
      break;
    case 1:
      if(now.getHours()>=7){
        then.setDate(then.getDate()+7);
      }
      break;
    default:
      then.setDate(then.getDate()+8-then.getDay());
  }
  var whenwillthenbenow = Math.floor((then - now)/(1000*60*60));//msec diff to hours, adjust as necesary for days or to include fractions
       SpreadsheetApp.getActiveSpreadsheet().toast('Until next update', whenwillthenbenow + " hours", 3000); //displaying toast for 3 seconds


}

分手备注,从您的评论中我不认为flush()会按照您的想法行事。它在脚本结束时是冗余的,或者在几秒钟内执行的任何脚本。大多数情况下,它用于强制更新长脚本以使进度可见,或在特定时间,例如,如果您尝试使用单元格格式进行动画像素艺术。 https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet-app#flush()