IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Deduire le format d'une cellule excel avec C#


Sujet :

C#

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 41
    Points : 43
    Points
    43
    Par défaut Deduire le format d'une cellule excel avec C#
    Bonjour, j'ai une question comme suit:

    J'utilise actuellement openxml pour extraire les données du fichier excel. J'arrive à récupérer le 'CellFormat' d'une cellule. Par exemple, pour savoir si cette cellule est formattée comme 'Date', je fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if ((formatId >= 14 && formatId <= 22) // standard
                            || (formatId >= 45 && formatId <= 47) // time
                            || (formatId >= 165u && formatId <= 180u))

    Mais les ranges [14,22], [45,47], [165,180] sont codés en dur et donc pas très élégant. En plus, pour les formats customisés ça ne marche pas. J'ai fouillé l'internet mais toujours pas réussi. Si éventuellement un génie entre vous a déjà travaillé sur ce sujet, j'aimerais avoir des conseils.

    Tous les indices sont bienvenues. Merci à l'avance.

  2. #2
    Membre éprouvé

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2011
    Messages
    487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2011
    Messages : 487
    Points : 945
    Points
    945
    Par défaut
    Passe déjà tes nombres en constantes genre BLABLA_RANGE_MIN_INDEX et BLABLA_RANGE_MAX_INDEX, ça sera plus clair et ça te permet de pouvoir les réutiliser sans les mettre en dur et devoir un gros ctrl+F de ouf dès que tu dois les changer.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 41
    Points : 43
    Points
    43
    Par défaut
    Citation Envoyé par MaximePalmisano Voir le message
    Passe déjà tes nombres en constantes genre BLABLA_RANGE_MIN_INDEX et BLABLA_RANGE_MAX_INDEX, ça sera plus clair et ça te permet de pouvoir les réutiliser sans les mettre en dur et devoir un gros ctrl+F de ouf dès que tu dois les changer.
    Merci beaucoup.

    En fait, les 'CellFormats' avec ID supérieur à 164 changent en fonction de version d'excel & les régions. Le codage en dur créera des problèmes de compatiblité à terme.

    Finalement j'ai fait genre comme dessous:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    // standard formats
                        if (formatId < 164u)
                        {
                            if ((formatId >= 14 && formatId <= 22) || (formatId >= 45 && formatId <= 47))
                                return true;
                        }
                        // custom formats
                        else
                        {
                            try
                            {
                                // parsable as date
                                DateTime.FromOADate(Convert.ToDouble(cell.CellValue.InnerText, cultureUS));
                                // checks format code
                                NumberingFormat nf = _numberingFormats.Descendants<NumberingFormat>().FirstOrDefault(f => f.NumberFormatId == formatId);
                                if (nf != null && nf.FormatCode != null)
                                {
                                    string code = nf.FormatCode;
                                    bool formatOk = (code.Contains("m") || code.Contains("y") || code.Contains("d"));
                                    if (formatOk)
                                        return true;
                                }
                            }
                            catch { }
                        }

  4. #4
    Membre éprouvé

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2011
    Messages
    487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2011
    Messages : 487
    Points : 945
    Points
    945
    Par défaut
    De rien, mais visiblement, tu n'as rien mis en constante

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 41
    Points : 43
    Points
    43
    Par défaut
    c'est la version brouillon juste pour tester la faisablite

    Citation Envoyé par MaximePalmisano Voir le message
    De rien, mais visiblement, tu n'as rien mis en constante

  6. #6
    Membre éprouvé

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2011
    Messages
    487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2011
    Messages : 487
    Points : 945
    Points
    945
    Par défaut
    OK, c'était histoire d'être sur. Dès fois il m'arrive d'être persuadé d'avoir fait un truc et quand je remets le nez dedans quelques mois après je me rends compte que j'avais oublié (Et bien sur je me flagelle en conséquence )

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment tester le format d'une cellule Excel avec PHPExcel.
    Par dimitri13 dans le forum Bibliothèques et frameworks
    Réponses: 0
    Dernier message: 16/07/2014, 13h56
  2. Modification du Format d'une Cellule Excel
    Par mehdiyou dans le forum VB.NET
    Réponses: 6
    Dernier message: 17/11/2009, 10h56
  3. Réponses: 1
    Dernier message: 19/04/2008, 22h39
  4. Remplir une cellule Excel avec une condition sous vb
    Par enibris dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 14/01/2008, 13h47
  5. Comment lire le contenu en arabe d'une cellule excel avec
    Par deneche dans le forum Bases de données
    Réponses: 1
    Dernier message: 17/03/2006, 10h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo