Как создать образцы SpreasheetML для всех трех параметров совместимости дат из Excel 2010?
Согласно ECMA-376, второе издание, часть 1 - Основы и справочник по языку разметки SpreadsheetML поддерживает серийные значения даты с тремя возможными настройками совместимости и различными диапазонами.
- В базовой системе дат 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? Или что-то другое?
1 ответ
Реализация по умолчанию в 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