Согласно ECMA-376, второе издание, часть 1. Справочник по основам и языку разметки SpreadsheetML поддерживает последовательные значения даты с тремя возможными настройками совместимости и различными диапазонами.
http://www.documentinteropinitiative.com/implnotes/ISO-IEC29500-2008/001.018.017.004.001.000.000.aspx
- В системе дат 1900 года нижний предел составляет 1 января -9999, который имеет серийное значение -4346018. Базовая дата для этой базовой системы дат - 30 декабря 1899 года, серийное значение которой равно 0.
- В системе дат обратной совместимости 1900 года нижний предел составляет 1 января 1900 года, что
имеет серийный номер 1. Базовая дата для этой базовой системы дат - 31 декабря 1899 г., которая имеет серийный номер.
значение 0.
- В системе дат обратной совместимости 1904 г. нижний предел составляет 1 января 1904 г.
имеет серийное значение 0. Базовая дата для этой базовой системы дат - 1 января 1904 г., которая имеет серийное значение.
0.
Тем не менее, когда я использую Microsoft Office Excel 2010 для создания файла * .xlsx с порядковым номером 1, в файле * .xlsx не будет установлен ни один атрибут dateCompatibility
(что означает «система баз данных 1900 года»), но дата, связанная с серийным номером 1, - 1 января 1900 года (что означает «обратная совместимость 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
в workbookPr
.
Параметры для рабочей книги показывают только непроверенный флажок для системы дат 1904 года. Я не вижу никакой опции для 1900 года, основанного на датах, против 1900 обратной совместимости.
Я неправильно читаю спецификацию? Или SpreadsheetML? Или что-то еще?