Как сгенерировать образцы 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 с dateCompatibility даты 1, файл * .xlsx не имеет dateCompatibility атрибута dateCompatibility (с указанием «1900 date base system»), но дата, связанная с датой serial 1 – 1 января 1900 года (с указанием «совместимость 1900 назад»).

Элемент dateCompatibility – это неотредактированный атрибут dateCompatibility .

 <x:workbookPr defaultThemeVersion="124226" xmlns:x="http://schemas.openxmlformats.org/spreadsheetml/2006/main" /> 

И вот строка данных, которая показывает дату с номером 1 и текстовый результат форматирования его как даты:

  <x:row r="3" spans="1:2"> <x:cr="A3"> <x:v>1</x:v> </x:c> <x:cr="B3" t="str"> <x:ft="shared" si="0" /> <x:v>1900-01-01 00:00:00.0</x:v> </x:c> </x:row> 

формула – это просто форматирование даты, упомянутое ранее на листе:

  <x:ft="shared" ref="B1:B42" si="0">TEXT(A1, "yyyy-mm-dd HH:mm:ss.0")</x:f> 

Эта формула дает тот же результат, что и применение шаблона формата даты к серийному номеру даты, показанного в приведенном ниже снимке экрана.

alt text

Кроме того, форматирование отрицательных дат приводит к ошибке, еще один показатель того, что Excel фактически использует систему с обратной совместимостью даты, несмотря на отсутствие атрибута dateCompatibility на dateCompatibility .

В настройках рабочей книги установлен флажок без отметки для системы дат 1904. Я не вижу никакой опции для совместимости с датой 1900 и 1900 назад.

Я читаю спецификацию неправильно? Или SpreadsheetML? Или что-то другое?

Реализация по умолчанию в Excel – dateCompatibility="1" (то есть 1900 обратная совместимость), поэтому, если она отсутствует, она по-прежнему dateCompatibility="1" . Обратите внимание, что Excel не полностью реализует SpreadsheetML (поскольку Word и PowerPoint также не полностью реализуют свои ML и с клиентскими версиями 2010 года, расширяют ML способами, не поддерживаемыми стандартом (стандартами)). 1 и 3, кажется, не реализованы (очень хорошо) в преобразовании значений серийных значений в дату.

Там было некоторое date1904 ECMA по этому вопросу и использование date1904 , см .: http://xmlguru.cz/2008/01/ecma-response-to-czech-ooxml-comments и поиск по дате Совместимость

  • Apache POI «Недопустимая подпись заголовка», открывающая Excel XML
  • Как вставить гиперссылку в excel с помощью открытого XML в c #
  • Создает ли Excel файлы, которые используют Rich Text Inline в ячейке?
  • Добавить страницу результатов SUM () Excel в XLST?
  • Экспорт уравнений AsciiMathML в формат Excel
  • SpreadsheetML - Ошибки и проверка
  • Создание документа Excel с помощью OpenXml sdk 2.0
  • Цвет текста в тексте ML (цвет)
  • Как вы используете OpenXML API для чтения таблицы из электронной таблицы Excel?
  • Декодировать содержимое XML-таблицы в клипе, создаваемом Excel
  • Файл, который обычно открывает наше приложение, но вернется в Excel
  • Давайте будем гением компьютера.