【问题标题】:Script for Google Sheets to calculate time by clicking?谷歌表格的脚本通过点击计算时间?
【发布时间】:2021-06-04 06:23:31
【问题描述】:

首先,我正在尝试制作一个按钮来更改单元格值;单元格的格式设置为 Hour:Minute。

我需要一个按钮来为单元格值添加 30 分钟。 所以我像个笨蛋一样尝试:

function timePlus() { 
  var ss = SpreadsheetApp.getActiveSpreadsheet(); 
  var timeCount = ss.getRange("G10"); 
  var timeAdd = timeCount.getValue();
  timeCount.setValue(timeAdd+30); 
}

如果我点击按钮,单元格的值会变成这样:

1899 年 12 月 29 日星期五 19:32:08 GMT-0500(东部标准时间)30

我承认,我从来没有学过脚本代码。

其次,我还想设置时钟(时间格式的单元格)从 09:00 开始,到 21:00 结束,然后再次跳到 09:00。就像如果我单击加号按钮的次数足以将时钟更改为 21:00,再单击一次会将时钟再次更改为 09:00。我太无能了,所以无法尝试这个。

第三,时钟重置为 09:00 后,向另一个单元格 +1,如天数计数器。我试过了:

function checkTime() { 
  var ss = SpreadsheetApp.getActiveSpreadsheet(); 
  var timeCount = ss.getRange("G10:H10"); 
  var dateCount = ss.getRange("I2:I3"); 
  var dateAdd = dateCount.getValue(); 
  if(timeCount.getValue() == "9:00:00 AM"); 
  dateAdd.setValue(dateAdd+1); 
}

但什么也没发生。

有人认为这是可能的吗?

【问题讨论】:

  • timeAdd+30 不会添加 30 分钟,它只会将 30 连接到 G10 中的时间

标签: google-apps-script


【解决方案1】:

解决方案:

您需要使用 Date() 对象来操作 Apps 脚本中的日期/时间:

例如,将时间增加 30 分钟、从晚上 9 点重置为上午 9 点并增加计数器的代码如下所示:

function timePlus() { 
  const HALF_HOUR = 1000*60*30;
  const HALF_DAY = 1000*60*60*12;
  const NINE_PM = -2209068000000;

  var ss = SpreadsheetApp.getActive(); 
  var timeCount = ss.getRange("G10");
  var dateCount = ss.getRange("I2");
  
  var timeAdd = timeCount.getValue();
  var dateAdd = dateCount.getValue();
  var old = new Date(timeAdd).valueOf();
  console.log(Session.getScriptTimeZone());

  if (old == NINE_PM) {
    timeCount.setValue(Utilities.formatString(Utilities.formatDate(new Date(old - HALF_DAY), Session.getScriptTimeZone(), "HH:mm:ss")));
    dateCount.setValue(dateAdd + 1);
  }
  else {
    timeCount.setValue(Utilities.formatString(Utilities.formatDate(new Date(old + HALF_HOUR), Session.getScriptTimeZone(), "HH:mm:ss")));
  }
  
}

重要提示:

请确保电子表格时区与脚本时区相同。您可以使用console.log(Session.getScriptTimeZone()); 并手动运行该函数来检查脚本时区。时区将在执行日志中可见。然后更改File -> Spreadsheet Settings中的工作表时区。

附:如果您对毫秒计算感到不知所措,可以阅读以下参考资料:

Dates in JavaScript

Session.getScriptTimeZone()

【讨论】:

  • 非常感谢您的回答!但是按钮将时间从上午 9:00:00 更改为晚上 8:02:00,表示代码将时间增加 11 小时 2 分钟。我将“HH:mm:ss”部分编辑为“HH:mm”,所以它看起来像 00:00 格式,但仍然看不出有什么问题。这是关于毫秒的问题吗?
  • 请确保电子表格时区与脚本时区相同。您可以使用 console.log(Session.getScriptTimeZone()); 检查脚本时区。并手动运行该功能。然后在文件 -> 电子表格设置中更改工作表时区。我编辑了我的答案以包括这个。
  • 上帝,现在它起作用了!代码正好增加 30 分钟,但时间不会重置为上午 9:00,计数日期也不起作用。你介意检查一下表格吗?我得到了你可以编辑的测试表。 docs.google.com/spreadsheets/d/…
  • 啊,时区将表格中9PM的值更改为-2209068000000。我再次编辑了答案。要检查该值,您可以将 console.log(old) 添加到代码中并复制该值。
  • 耶稣代码完美运行!!!你有我很多很多很多的感谢,你赢得了它!这是我生命中最美好的事情之一,你让我开心!谢谢!
猜你喜欢
  • 2016-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-08
  • 2017-10-08
  • 1970-01-01
  • 2021-11-24
相关资源
最近更新 更多