1

为另一个与日期/时间相关的帖子道歉。我还没有弄清楚这个问题,所以欢迎任何评论。执行摘要:Excel 可用于处理较小的经过时间(体育赛事时间等),但表格不能,因为您需要编写一个脚本来显示较小的时间,而脚本会搞砸一些东西,以便表格不再将单元格视为稍后手动更改时间的时间。

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

我们目前将所有内容都存储在 Excel 中,效果很好。如果您在某个范围内定义自定义显示格式,然后输入类似2:43.02(2 分钟,43.02 秒)的时间,则单元格仍然包含时间,Excel 可以对这些时间进行算术运算。

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

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

表格中有一些魔法可以确定单元格是否包含日期。如果我使用内置的时间格式,那么 Sheets 就会知道这是一个时间,并且如果手动更改时间,它就可以进行算术运算。如果我使用下面的函数(从这里)更改时间格式,那么魔法就会丢失,我无法手动更改时间。

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

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

谢谢。

4

1 回答 1

4

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

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

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

=VALUE("0:2:43.02")

or you could have an input column that is formatted as plain text, and then have a display column that similarly converts to a time value via formula (and this display column would be custom formatted). Or, you could have a helper script that presents an input box for the active cell, where you enter the split time, and then creates a formula like above and populates it in the cell (the set number format could be built in to this script as well).

I wish these workarounds were unnecessary.

于 2013-01-19T20:49:48.293 回答