与Excel相比,谷歌电子表格日期/时间坏了



为又一个与日期/时间相关的帖子道歉。我还没弄明白这个,欢迎任何评论。执行摘要: Excel可以用于处理较小的经过时间(运动事件时间等),但Sheets不能,因为您需要编写一个脚本来显示较小的时间,并且该脚本会弄乱一些东西,以便在稍后手动更改时间时,Sheets不再将单元格视为时间。

我需要的时间通常很短,在几分钟的范围内,秒到小数点后2位。我必须对这些时间做算术(通常只是与另一个时间进行比较)。

我们目前将所有内容存储在Excel中,这很好。如果您在区域中定义自定义显示格式,然后输入时间,如2:43.02 (2 mins, 43.02s),则单元格仍然包含时间,Excel可以对这些时间进行算术运算。

然后上传Excel电子表格,并在工作表中打开它。没有内置的格式扩展,因为有在Excel中,所以我必须使用扩展函数来显示时间为2:43.02,例如(见下文;函数调用setNumberFormat)。在新的表格版本的文档中,Excel时间仍然是时间,比较工作,一切看起来都是正确的。

问题在这里。一切工作,直到您手动输入一个新的时间到表格单元格。例如,如果输入2:41.05,则单元格不再包含时间对象,并且所有算法都被破坏。所以,我不能用表格来代替Excel。我必须将所有内容保存在Excel中并偶尔上传,将表格版本保持为只读。

在Sheets中有一些神奇的东西来确定单元格是否包含日期。如果我使用内置的时间格式,那么Sheets就知道这是一个时间,并且可以在手动更改时间时进行算术运算。如果我使用下面的函数(从这里)更改时间格式,那么魔力就消失了,我不能手动更改时间。

function EditFormat() {
  var oldname = SpreadsheetApp.getActiveRange().getNumberFormat();
  var name = Browser.inputBox("Current format (blank = no change):rn"+ oldname);
  SpreadsheetApp.getActiveRange().setNumberFormat((name=="")?oldname:name);
}

问题:setNumberFormat坏了吗?有更好的方法来做这一切吗?我可以在脚本中做一些其他的事情来保留细胞的魔法状态作为时间吗?还是我必须回到Excel?

谢谢。

这是由于(可悲的是长期存在的)Sheets错误导致的,解析器在两个方面失败:

  1. 格式2:43.02不能被成功地强制转换为时间值,但是格式0:02:43.02(或0:2:43.02)可以。
  2. 即使如此,对于直接输入的值,百分之秒将被忽略。

两点都适用于电子表格中的所有值,但是只有两点适用于直接输入的值。因此,一个解决方法是通过公式输入:

=VALUE("0:2:43.02")

或者您可以有一个格式化为纯文本的输入列,然后有一个通过公式类似地转换为时间值的显示列(该显示列将被自定义格式化)。或者,您可以使用一个助手脚本,该脚本为活动单元格提供一个输入框,您可以在其中输入分割时间,然后创建一个类似上述的公式,并将其填充到单元格中(设置数字格式也可以内置到该脚本中)。

最新更新