【问题标题】:How to send the final reading of a stopwatch to spreadsheet using Apps Script如何使用 Apps 脚本将秒表的最终读数发送到电子表格
【发布时间】:2019-12-29 08:15:17
【问题描述】:

我正在尝试制作一个网络应用程序来跟踪工作时间。代理在开始工作时需要单击一个按钮,并在完成后再次单击该按钮。所以我编写了一个秒表。但是我找不到捕获秒表的最终读数并将其发送到电子表格的方法。谁能帮帮我?

<script> 

    var sw = {
  /* [INIT] */
  /* sw: stopwatch */
  etime : null, // holds HTML time display
  erst : null, // holds HTML reset button
  ego : null, // holds HTML start/stop button
  timer : null, // timer object
  now : 0, // current timer
  //send : null, 

 init : function () {
    // Get HTML elements
    sw.etime = document.getElementById("sw-time");
    sw.erst = document.getElementById("sw-rst");
    sw.ego = document.getElementById("sw-go");

    // Attach listeners
    sw.erst.addEventListener("click", sw.reset);
    sw.erst.disabled = false;
    sw.ego.addEventListener("click", sw.start);
    sw.ego.disabled = false;
  },

  /* [ACTIONS] */
  tick : function () {
  // tick() : update display if stopwatch running

    // Calculate hours, mins, seconds
    sw.now++;
    var remain = sw.now;
    var hours = Math.floor(remain / 3600);
    remain -= hours * 3600;
    var mins = Math.floor(remain / 60);
    remain -= mins * 60;
    var secs = remain;

    // Update the display timer
    if (hours<10) { hours = "0" + hours; }
    if (mins<10) { mins = "0" + mins; }
    if (secs<10) { secs = "0" + secs; }
    sw.etime.innerHTML = hours + ":" + mins + ":" + secs;
  },

  start : function () {
  // start() : start the stopwatch 
  // change "start" to "check in"

    sw.timer = setInterval(sw.tick, 1000);
    sw.ego.value = "Check Out"; 
    sw.ego.removeEventListener("click", sw.start);
    sw.ego.addEventListener("click", sw.stop);
  },

  stop  : function () {
  // stop() : stop the stopwatch
  //change to check out button
  //send the last reading to the spreadsheet??

    clearInterval(sw.timer);
    sw.timer = null;
    sw.ego.value = "Check In"; 
    sw.ego.removeEventListener("click", sw.stop);
    sw.ego.addEventListener("click", sw.start);

  },

  reset : function () {
  // reset() : reset the stopwatch

    // Stop if running
    if (sw.timer != null) { sw.stop(); }

    // Reset time
    sw.now = -1;
    sw.tick();
  }
};

window.addEventListener("load", sw.init);

    </script>

【问题讨论】:

  • 您是否使用 Google Apps 脚本来创建您的网络应用程序?
  • 是的,我正在使用 Google Apps 脚本

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


【解决方案1】:

如果您在 webapp 的 html 页面中运行它。然后你可以将它发送到服务器端函数:

google.script.run.withSuccessHandler(function(msg){
  window.alert(msg);
}).saveTime(sw.now);

saveTime() 函数就是这样的。

function saveTime(count) {
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName('Sheet1');
  sh.getRange("A1").setValue(count/60);//for minutes
  SpreadsheetApp.flush();
  return "Thanks I got it";
}

【讨论】:

  • 我试过了。但是秒表不适用于服务器端功能。我应该在哪里修改代码? script.google.com/d/…
  • 我添加了一个 SpreadsheetApp.flush。它现在可能有效。写入电子表格并不是特别快,所以这可能行不通。
猜你喜欢
  • 2020-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多