Как создать образцы 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 date base system"), но дата, связанная с date serial 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
атрибут on workbookPr
.
Параметры рабочей книги показывают только непроверенный флажок для системы дат 1904 года. Я не вижу никакого варианта для 1900 даты на основе против 1900 обратной совместимости.
Я неправильно читаю спецификацию? Или SpreadsheetML? Или что-то еще?
1 ответ:
Реализация по умолчанию в Excel-это
dateCompatibility="1"
(т. е. обратная совместимость 1900), поэтому, если она отсутствует, она по-прежнемуdateCompatibility="1"
. Обратите внимание, что Excel не полностью реализует SpreadsheetML (так как Word и PowerPoint также не полностью реализуют свои соответствующие MLs и с клиентскими версиями 2010 года расширяют ML способами, не поддерживаемыми стандартом(АМИ)). 1 и 3, по-видимому, не реализованы (очень хорошо) в преобразовании серийных значений в значения даты.Произошло несколько отказов в ЕСМА по этому и использование
date1904
, см.: http://xmlguru.cz/2008/01/ecma-response-to-czech-ooxml-comments и поиск по dateCompatibility