C # Open XML 2.0 NumberFormatId gamme

De travail avec Open XML 2.0 à l'aide de c# pour traiter de gros fichiers excel. Question, je suis en cours d'exécution dans la cellule, je suis d'analyse n'a pas un Type de données j'ai ensuite vérifier la NumberFormatId pour déterminer si elle est décimal, le nombre ou la date. Je suis à la recherche de l'exacte NumberFormatId gamme de nombres de décimales vs dates. Ils semblent être tous sur la place certains nombres décimales ont des formats de 189,212,214,305 et les dates d'avoir des valeurs de 185, 194, 278 etc. Personne ne sait si le cahier des charges définit ces plages?

Édité - Plus D'Informations

Ci-dessous est un exemple du format de nombre de 194 à partir de la style.xml fichier à l'intérieur de la xl dossier.

Les feuilles de calcul excel sont de différentes régions du monde donc je pense que le nombre de formats sont différents, mais ils ne se chevauchent? Va numFmtId 194 être autre chose qu'une date sur les différents paramètres de culture?

Ci-dessous est la façon dont je suis la conversion de c.CellValues comme "40574" pour les dates, mais la question est comment puis-je savoir si "40574" est un jour et pas un numéro?

 DateTime.FromOADate(Convert.ToDouble(c.CellValue.Text));

Actuellement, je suis en train de faire cela en vérifiant si il n'y a pas de Type de données que de vérifier la CellFormat mais il y a des problèmes lors de certaines NumberFormatId ne sont pas dans ma case.

    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

Modifier

Dans ma mise à jour post j'ai oublié de poster la valeur que j'ai trouvé dans le style.xml fichier:

<numFmt numFmtId="323" formatCode="mmm/yy;@"/>

Donc, avec cela, ma question serait de savoir comment puis-je obtenir le formatCode et de l'analyser pour déterminer si c'est une date?

Ci-dessous est la sortie de la fenêtre de débogage de la 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"

source d'informationauteur maguy