如何为Excel 2010中的所有三个date兼容性设置生成SpreasheetML示例?

根据ECMA-376第二版,第1部分 – 基础和标记语言参考 SpreadsheetML支持具有三种可能的兼容性设置和各种范围的date序列值。

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

  • 在1900年的date基础系统中,下限是1999年1月1日,它的序列号是-4346018。 这个数据库系统的基准date是1899年12月30日,它的序列号为0。
  • 在1900向后兼容date库系统中,下限是1900年1月1日,它的序列值为1.此date系统的基准date为1899年12月31日,序列值为0。
  • 在1904年的向后兼容date库系统中,下限是1904年1月1日,它具有序列值0.该date基础系统的基准date是1904年1月1日,其序列值为0。

但是,当使用Microsoft Office Excel 2010生成date序列为1的* .xlsx文件时,* .xlsx文件没有设置任何dateCompatibility属性(表示“1900date基本系统”),而是与date序列号1是1900年1月1日(表示“1900向后兼容性”)。

workbookPr元素是这个,未经编辑的,没有dateCompatibility属性。

 <x:workbookPr defaultThemeVersion="124226" xmlns:x="http://schemas.openxmlformats.org/spreadsheetml/2006/main" /> 

下面是一行数据,显示date序列1和格式化为date的文本结果:

  <x:row r="3" spans="1:2"> <x:cr="A3"> <x:v>1</x:v> </x:c> <x:cr="B3" t="str"> <x:ft="shared" si="0" /> <x:v>1900-01-01 00:00:00.0</x:v> </x:c> </x:row> 

该公式只是date格式,在工作表中前面引用:

  <x:ft="shared" ref="B1:B42" si="0">TEXT(A1, "yyyy-mm-dd HH:mm:ss.0")</x:f> 

此公式给出与将date格式图案应用于date序列号相同的结果,在下面的屏幕截图中显示。

替代文字

同样格式化否定date会导致错误,另一个指标是Excel实际上使用向后兼容的date系统,尽pipedateCompatibility上没有dateCompatibility属性。

工作簿的选项仅显示1904年date系统的未选中checkbox。 我没有看到1900年的date为1900年向后兼容的选项。

我读的规格错了吗? 还是SpreadsheetML? 或者是其他东西?

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

ECMA在这方面已经有一些推动,并且使用了date1904 ,请参阅: http : //xmlguru.cz/2008/01/ecma-response-to-czech-ooxml-comments并在dateCompatibility上进行search