为另一个与日期/时间相关的帖子道歉。我还没有理解这个,所以任何评论都欢迎。 执行摘要:Excel可用于处理较少的经过时间(运动事件时间等),但表格不能,因为您需要编写一个脚本来显示很少的时间,并且脚本将某些内容搞砸,以便Sheets不再将单元格视为以后手动更改时间的时间。
我需要的时间通常很短,在几分钟的范围内,小时数到2位小数。我必须在这些时间做算术(通常只与另一次进行比较)。
我们目前将所有内容存储在Excel中,工作正常。如果您在某个范围内定义自定义显示格式,然后按2:43.02
(2分钟,43.02秒)之类的时间输入时间,则单元格仍然包含时间,Excel可以对这些时间进行算术运算。
然后我上传Excel电子表格,并在表格中打开它。没有像Excel中那样的内置格式扩展,因此我必须使用扩展函数将时间显示为2:43.02
,例如(见下文;函数调用setNumberFormat
)。在文档的新表单版本中,Excel时间仍然是时间,并且比较有效,并且一切看起来都正确。
这是问题所在。在您手动将新时间输入到Sheets单元格之前,所有内容都有效。例如,如果我输入2:41.05
,则单元格不再包含时间对象,并且所有算术都被破坏。所以,我不能使用Sheets来替换Excel。我必须将所有内容保存在Excel中并偶尔上传,将Sheets版本保持为只读。
Sheets中有一些魔法可以确定单元格是否包含日期。如果我使用内置时间格式,那么Sheets知道它是时间,并且如果手动更改时间,则可以进行算术运算。如果我使用下面的函数(来自here)更改时间格式,那么该魔法就会丢失,我无法手动更改时间。
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?
感谢。
答案 0 :(得分:4)
这是由于(遗憾的是长期存在的)Sheets错误导致解析器在两个方面失败:
这两个点都适用于电子表格中的所有值,但只有第二点适用于直接输入的值。因此,解决方法是通过公式输入:
=VALUE("0:2:43.02")
或者你可以有一个格式为纯文本的输入列,然后有一个显示列,类似地通过公式转换为时间值(这个显示列将是自定义格式)。或者,您可以有一个帮助脚本,它为活动单元格提供一个输入框,您可以在其中输入拆分时间,然后创建如上所示的公式并在单元格中填充它(可以在此脚本中内置设置的数字格式)同样)。
我希望这些解决方法不必要。