C# Open XML 2.0 NumberFormatId диапазон
работа с Open XML 2.0 с помощью c# для анализа больших файлов excel. Проблема я бегу в это клетка я анализ не имеет данных я тогда проверяем NumberFormatId, чтобы определить, если это десятичное, число или дата. Я ищу точный диапазон NumberFormatId для чисел / десятичных знаков против дат. Они, похоже, повсюду, некоторые числа/десятичные дроби имеют форматы 189,212,214,305 и даты со значениями 185, 194, 278 и т. д. Кто-нибудь знает, определяет ли спецификация эти диапазоны?
Редактировать - Дополнительная Информация
Ниже приведен пример числового формата 194 из стиля.xml-файл в папке xl.
листы excel из разных регионов мира, поэтому я думаю, что числовые форматы разные, но они перекрываются? Будет ли numFmtId 194 чем-то иным, чем дата в разных настройках культуры?
ниже показано, как я конвертирую c.CellValues, как "40574" на даты, но проблема откуда мне знать, что" 40574 " - это дата, а не число?
DateTime.FromOADate(Convert.ToDouble(c.CellValue.Text));
В настоящее время я делаю это, проверяя, нет ли типа данных, чем проверить CellFormat, но есть проблемы, когда некоторые из NumberFormatId не находятся в моей проверке.
private Object FormatCellValue(Cell c, SharedStringTable ssTable, CellFormats cellFormats)
{
if (c.CellValue != null)
{
// If there is no data type, this must be a string that has been formatted as a number
if (c.DataType == null)
{
CellFormat cf;
if (c.StyleIndex == null)
{
cf = cellFormats.Descendants<CellFormat>().ElementAt<CellFormat>(0);
}
else
{
cf = cellFormats.Descendants<CellFormat>().ElementAt<CellFormat>(Convert.ToInt32(c.StyleIndex.Value));
}
if ((cf.NumberFormatId >= 14 && cf.NumberFormatId <= 22) ||
(cf.NumberFormatId >= 165 && cf.NumberFormatId <= 180) ||
cf.NumberFormatId == 278 || cf.NumberFormatId == 185 || cf.NumberFormatId == 196 ||
cf.NumberFormatId == 217 || cf.NumberFormatId == 326) // Dates
{
try
{
DateTime dt;
dt = DateTime.FromOADate(Convert.ToDouble(c.CellValue.Text));
...CODE CONTINUES
редактировать
в моем обновленном сообщении я забыл опубликовать значение, которое я нашел в стиле.xml-файл:
<numFmt numFmtId="323" formatCode="mmm/yy;@"/>
Итак, с этим моим вопросом будет как мне получить formatCode и проанализировать его определить, если это дата?
Ниже приведен вывод из окна немедленной отладки numberformat 323
{DocumentFormat.OpenXml.Spreadsheet.CellFormat}
base {DocumentFormat.OpenXml.OpenXmlCompositeElement}: {DocumentFormat.OpenXml.Spreadsheet.CellFormat}
Alignment: {DocumentFormat.OpenXml.Spreadsheet.Alignment}
ApplyAlignment: "1"
ApplyBorder: "1"
ApplyFill: "1"
ApplyFont: "1"
ApplyNumberFormat: "1"
ApplyProtection: "1"
BorderId: "64"
ExtensionList: null
FillId: "0"
FontId: "83"
FormatId: "37992"
LocalName: "xf"
NumberFormatId: "323"
PivotButton: null
Protection: {DocumentFormat.OpenXml.Spreadsheet.Protection}
QuotePrefix: "1"
1 ответов
списки форматов значений ID
Ниже приведен список вариантов форматирования (источник)
ID Format Code
0 General
1 0
2 0.00
3 #,##0
4 #,##0.00
9 0%
10 0.00%
11 0.00E+00
12 # ?/?
13 # ??/??
14 d/m/yyyy
15 d-mmm-yy
16 d-mmm
17 mmm-yy
18 h:mm tt
19 h:mm:ss tt
20 H:mm
21 H:mm:ss
22 m/d/yyyy H:mm
37 #,##0 ;(#,##0)
38 #,##0 ;[Red](#,##0)
39 #,##0.00;(#,##0.00)
40 #,##0.00;[Red](#,##0.00)
45 mm:ss
46 [h]:mm:ss
47 mmss.0
48 ##0.0E+0
49 @
Hower, этот список указывает только несколько форматов. Согласно этому сообщению:чтение дат из файлов OpenXML Excel, формат со значением ID менее 164 встроены. Вы также можете найти более длинный список форматов.
проверка значений идентификаторов форматов в xlsx-файле
для форматов с большими значениями ID, вы можете найти их определения внутри самого файла. Чтобы увидеть их, вы должны открыть его с помощью браузера zip-архива и найти стили.в XML на xl