根據ECMA-376,第二版,第1部分 - 基礎和標記語言參考 SpreadsheetML支持具有三種可能的兼容性設置和各種範圍的日期序列值。如何爲Excel 2010中的所有三個日期兼容性設置生成SpreasheetML示例?
串行值
- 在1900年日期基本系統,下限爲1月1日,-9999,其具有的序列值-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實際使用後向兼容的系統日期儘管上workbookPr
不存在dateCompatibility
屬性。
該工作簿的選項僅顯示1904年日期系統的未選中複選框。我沒有看到1900年的日期和1900年的向後兼容性。
我讀的規格錯了嗎?或SpreadsheetML?或者是其他東西?
感謝。現在您已經提到過了,我發現默認值是針對規範中其他地方的「向後兼容」模式。我還注意到它將1900年編纂爲「向後兼容」的閏年。在我的翻譯代碼中愛這個小分支。 :-)'if(dateCompatibility == DateCompatibility.BackwardsCompatibleBase1900 && dateSerial> = 61.0){dateSerial - = 1; }' –
是的,作爲閏年的1900年實際上是早期版本的Lotus 1-2-3的倒退;當Excel需要兼容性 –