2

根据ECMA-376, Second Edition, Part 1 - Fundamentals And Markup Language Reference SpreadsheetML 支持具有三种可能的兼容性设置和各种范围的日期序列值。

http://www.documentinteropinitiative.com/implnotes/ISO-IEC29500-2008/001.018.017.004.001.000.000.aspx

  • 在 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 实际使用向后兼容的日期系统的另一个指标,尽管没有dateCompatibilityon 属性workbookPr

工作簿的选项仅显示 1904 日期系统的未选中复选框。我看不到基于 1900 日期与 1900 向后兼容性的任何选项。

我读错规范了吗?还是电子表格ML?或者是其他东西?

4

1 回答 1

3

Excel 中的默认实现是dateCompatibility="1"(即 1900 向后兼容),所以如果它不存在,它仍然是dateCompatibility="1". 请注意,Excel 没有完全实现 SpreadsheetML(因为 Word 和 PowerPoint 也没有完全实现它们各自的 ML,并且对于 2010 客户端版本,以标准不支持的方式扩展 ML)。在将序列值转换为日期值时,1 和 3 似乎没有实现(非常好)。

ECMA 对此和使用有一些回击date1904,请参阅:http: //xmlguru.cz/2008/01/ecma-response-to-czech-ooxml-comments并搜索dateCompatibility

于 2011-01-22T05:45:55.833 回答