根据ECMA-376, Second Edition, Part 1 - Fundamentals And Markup Language Reference SpreadsheetML 支持具有三种可能的兼容性设置和各种范围的日期序列值。
- 在 1900 日期基准系统中,下限为 -9999 年 1 月 1 日,其序列值为 -4346018。此日期基准系统的基准日期是 1899 年 12 月 30 日,其序列值为 0。
- 在 1900 向后兼容的日期基系统中,下限为 1900 年 1 月 1 日,序列值为 1。此日期基系统的基准日期为 1899 年 12 月 31 日,序列值为 0。
- 在 1904 向后兼容的日期基系统中,下限为 1904 年 1 月 1 日,序列值为 0。此日期基系统的基准日期为 1904 年 1 月 1 日,序列值为 0。
但是,当我使用 Microsoft Office Excel 2010 生成日期序列为 1 的 *.xlsx 文件时,*.xlsx 文件没有任何dateCompatibility
属性集(表示“1900 日期基准系统”),而是与日期序列关联的日期1 是 1900 年 1 月 1 日(表示“1900 向后兼容”)。
workbookPr 元素就是这个,未经编辑,没有dateCompatibility
属性。
<x:workbookPr defaultThemeVersion="124226" xmlns:x="http://schemas.openxmlformats.org/spreadsheetml/2006/main" />
这是一行数据,显示日期序列为 1 以及将其格式化为日期的文本结果:
<x:row r="3" spans="1:2">
<x:c r="A3">
<x:v>1</x:v>
</x:c>
<x:c r="B3" t="str">
<x:f t="shared" si="0" />
<x:v>1900-01-01 00:00:00.0</x:v>
</x:c>
</x:row>
该公式只是日期格式,在工作表的前面引用:
<x:f t="shared" ref="B1:B42" si="0">TEXT(A1, "yyyy-mm-dd HH:mm:ss.0")</x:f>
该公式给出的结果与将日期格式模式应用于日期序列号相同,如下面的屏幕截图所示。
格式化负日期也会导致错误,这是 Excel 实际使用向后兼容的日期系统的另一个指标,尽管没有dateCompatibility
on 属性workbookPr
。
工作簿的选项仅显示 1904 日期系统的未选中复选框。我看不到基于 1900 日期与 1900 向后兼容性的任何选项。
我读错规范了吗?还是电子表格ML?或者是其他东西?