Существует два способа получить формат даты для ячейки.
Вы начинаете с захвата "s" или StyleIndex.Обратите внимание на дату в числовом необработанном формате ниже (40667):
<row r="1">
<c r="A1" s="1">
<v>40667</v>
</c>
</row>
Атрибут "s" в узлах ячеек указывает на начинающийся с нуля массив узлов styles.xml, начинающийся с 0. Это ключчтобы найти формат даты, если таковой имеется, который сопоставляется с необработанными числовыми данными даты.Вы видите s = 1, который указывает на второй узел xf в следующем разделе style.xml форматирования ячейки вашей книги Excel:
<cellXfs count="2">
<xf numFmtId="0" ... />
<xf numFmtId="14" ... />
</cellXfs>
Во втором узле вы видите значение numFmtId = "14".Это число FormatID.Он говорит вам, что это идентификатор, необходимый для определения того, в каком номере должна быть представлена ваша дата. Но это число указывает на два возможных места для формата даты.Если его число находится в диапазоне 14-22, это встроенный стиль для даты.Если он выходит за пределы этого диапазона, его (возможно) пользовательский формат даты добавляется владельцем файла Excel.Вы не будете знать, пока не проверите оба места.
В первом случае, если значение равно 14-22, вам нужно будет сопоставить его с одним из предварительно созданных форматов даты, которые есть в каждом файле excel (mm-дд-гг и т. д.).Вы можете найти эту таблицу в OpenXML SDK.Вот пример тех, чей numFmtId сопоставлен со встроенными форматами даты ....
14 mm-dd-yy
15 d-mmm-yy
16 d-mmm
17 mmm-yy
18 h:mm AM/PM
На данный момент вы знаете дату и формат, в котором она будет представлена. Если ее нетодно из этих значений, скорее всего, пользовательский номер.И теперь вам нужно снова найти в файле styles.xml узел стиля с соответствующим значением numFmtId.Эти узлы будут содержать пользовательский формат даты следующим образом:
<numFmts count="2">
<numFmt numFmtId="164" formatCode="mm/yyyy;@" />
<numFmt numFmtId="165" formatCode="0.000" />
<numFmt numFmtId="166" formatCode="#,##0.000" />
</numFmts>
Обратите внимание, что если ваш numFmtId был 164, вы нашли его пользовательский формат даты.Таким образом, чтобы поймать все эти сумасшедшие форматы дат, как пользовательские, так и встроенные, лучше всего поддерживать диапазон допустимых «форматов» в виде строк, найти ваш formatCode и посмотреть, соответствует ли он одному из приемлемых в вашем коде.
Удачи!