Как создать образцы SpreasheetML для всех трех параметров совместимости дат из Excel 2010?

Согласно 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? Или что-то другое?

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

Другие вопросы по тегам