В связи с вашим последующим вопросом о том, как определить, содержит ли ячейка значение даты, или нет, ответ состоит в том, что нет простого способа.
Ячейка, <c>
, элементимеет атрибут типа t
, но он не используется для этого серийного типа даты Excel.Таким образом, единственное, что отличает ячейку, которая содержит дату, закодированную как 40817, и ячейку со значением 40817, - это формат, который применяется к числу (на которое ссылается через атрибут s
ячейки).* Чтобы определить этот формат, вам нужно найти атрибут numFmtId
ссылочного стиля xf
в соответствующем styles.xml
и попытаться определить, является ли этот формат форматом даты.И для того, чтобы сделать это, вам придется применить некоторую эвристику.
В целом, это огромная боль, когда вы хотите отличить даты от других числовых данных, и для меня это упущение в формате SpreadsheetML.
PS Стандарт OOXML определяет значение даты d
для атрибута типа t
, но оно используется только для дат ISO 8601, которые фактически не создаются в Excel.(Обновление: этот формат даты теперь используется в строгом режиме в Excel 2013).