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

avec Java Discussion :

lecture colonne excel donne nullPointer


Sujet :

avec Java

  1. #1
    Membre averti
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2016
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2016
    Messages : 14
    Par défaut lecture colonne excel donne nullPointer
    Bonjour à tous,

    je rencontre une nullPointer exception quand j'essaie de lire une colonne dans une ligne d'un fichier excel

    mon classeur excel est composé de plusieurs ligne qui ont chacune 3 colonnes de renseigné, qui correspondent aux information d'un joueur (exemple en dessous)
    Erwan Capitaine 22


    j'arrive bien à récupérer les informations contenues dans la première colonne, mais pas dans la seconde, ni dans la troisième

    voici ma méthode de lecture
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    private static JoueurHandball rowToJoueur(final Row row) { 
     
        JoueurHandball joueur = new JoueurHandball(); 
        joueur.setNom(row.getCell(0).getStringCellValue()); 
        joueur.setPoste(row.getCell(1).getStringCellValue()); 
        joueur.setNumero((int) row.getCell(2).getNumericCellValue()); 
     
        return joueur; 
     
     }
    la ligne qui récupère le nom me renvoie la valeur "Erwan", mais celle censé récupérer le poste me renvoie un NullPointerException, et idem pour le numéro.

    merci d'avance pour vos réponses.

  2. #2
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 096
    Par défaut
    Est-tu sure que ton fichier XLS(x) est correcte parce qu'avec le peu de code que je vois, tout semble OK.
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre averti
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2016
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2016
    Messages : 14
    Par défaut
    comme j'arrive à récupérer la première colonne je pense que le fichier est correct, après en log j'ai la trace suivante quand il exécute la ligne de récupération du poste
    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at traitement.TraitementSport.rowToJoueur(TraitementSport.java:115)

    la ligne 115 étant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    joueur.setPoste(row.getCell(1).getStringCellValue());
    après j'avoue ne pas avoir essayé de changer le format de mes cellules en les mettant en pure Texte ou Nombre dans Excel

  4. #4
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 096
    Par défaut
    Refile un bout de fichier (ou tout le fichier si c'est pas confidentiel) car c'est impossible à voire d'ou peut venir le problème ainsi. (dans le bon format)

    Mais a priori

    retourne un null comme indiqué par le stacktrace.
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre averti
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2016
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2016
    Messages : 14
    Par défaut
    Voilà le fichier utilisé.
    Si ça peut aider voici aussi un lien vers le code complet que j'utilise
    https://github.com/ErwanLT/Sports/bl...mentSport.java
    la méthode le lecture de ligne Excel ce trouve dans la méthode traitementHandball
    Fichiers attachés Fichiers attachés

  6. #6
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 096
    Par défaut
    Nom : hemhem.png
Affichages : 149
Taille : 22,5 Ko

    Chez moi je n'ai aucun nullpointer, ça marche ... par contre je remarque un truc bizarre que je n'ai pas encore compris.

    Edit : Ok, je viens de voire une truc qui peut être pourrait expliquer des choses, l'index était à 1 c'était voulu ? (voir le commentaire)

    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
    private static List<JoueurHandball> feuilleToEquipe(final Sheet sheet){
            List<JoueurHandball> equipe = new ArrayList<JoueurHandball>();
            int index = 0; // Pourquoi avoir mis 1 avant ?
            Row lignesEquipe = sheet.getRow(index++);
     
            while (lignesEquipe != null) {
     
                final JoueurHandball joueur = rowToJoueur(lignesEquipe);
                equipe.add(joueur);
     
                lignesEquipe = sheet.getRow(index++);
            }
     
            return equipe;
     
        }
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre averti
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2016
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2016
    Messages : 14
    Par défaut
    bizarre.

    l'index qui commence à 1 car à la base je comptait mettre une ligne d'entête, mais qu'au final elle est pas présente dans le fichier.
    je vais réessayer ce soir en rajoutant de la log en console pour mieux voir

  8. #8
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    A noter, qu'on peut aussi faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for(Row row : sheet) {
             equipe.add(rowToJoueur(row));
    }
    pas besoin de se coltiner un index, de faire des tests sur les "null", des mi while mi do/while , tout ça.

    Pour sauter la ligne de titre on peut faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    boolean skipHeader=true;
    for(Row row : sheet) {
           if ( skipHeader ) {
                skipHeader = false;
           }
           else {
                  equipe.add(rowToJoueur(row));
           }
    }
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    StreamSupport.stream(sheet.spliterator(), false).skip(1).forEach( row-> equipe.add(rowToJoueur(row)) );
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  9. #9
    Membre averti
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2016
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2016
    Messages : 14
    Par défaut résolue
    J'ai changé le format des colonne sous Excel et ça passe sans générer l'exception.
    ensuite je vais mettre en place la solution proposer par joel.drigo
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    boolean skipHeader=true;
    for(Row row : sheet) {
           if ( skipHeader ) {
                skipHeader = false;
           }
           else {
                  equipe.add(rowToJoueur(row));
           }
    }
    merci à tous pour vos réponses et votre aide.

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 03/06/2011, 12h57
  2. Réponses: 6
    Dernier message: 02/05/2011, 08h40
  3. changer la valeur des données dans une colonne excel et les trier
    Par thewind1 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 28/01/2011, 22h35
  4. Réponses: 6
    Dernier message: 04/04/2007, 10h27

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