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

Documents Java Discussion :

POI placer chaque ligne d'un xls dans une variable différente


Sujet :

Documents Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2014
    Messages
    154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2014
    Messages : 154
    Par défaut POI placer chaque ligne d'un xls dans une variable différente
    Bonjour a tous,

    Voilà, je n'y connais pas grand chose avec Apache POI mais je voudrais "simplement" lire un fichier XLS et placer chacune de ces rows dans une variable en sachant que le fichier peut avoir un nombre de lignes totalement variable (de 10 a 2000 environs)
    Je sais comment lire une cellule spécifique mais pas comment le faire pour la totalité de la ligne et de tout le fichier...
    Y aurait-il une fonction spécifique?

    Merci d'avance.

  2. #2
    Membre très actif
    Profil pro
    Inscrit en
    Février 2010
    Messages
    767
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 767
    Par défaut
    Bonjour,

    Si tu utilises un objet XSSFSheet sheet

    Tu peux itérer sur les rows et sur les cell :

    XSSFRow row = sheet.getRow(i);
    XSSFCell cell = row.getCell(i);

    Tu obtients la dernière rangée avec la méthode getLastRowNum()


    Bon courage,

  3. #3
    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,

    Si ton but est de charger l'ensemble des lignes/cellules du fichier dans des variables, pour faire des traitements ultérieures, premièrement, tu ne pourras pas le faire dans des variables différentes : il n'est pas possible de créer des variables dynamiquement, ce qui est nécessaire puisque le nombre de lignes est variable. Mais même s'il était fixe, ce ne serait pas une bonne idée, parce que ce serait très fastidieux à écrire et à maintenir, et pas souple du tout à manipuler.

    Il faut pour faire ce genre de chose utiliser des strucures : tableaux, listes...ou plus généralement collections. Tu peux faire par exemple une classe qui représente chaque ligne (avec un attribut par colonne, et des méthodes de type accesseurs et mutateurs pour les manipuler. En Java standard, pour une liste, tu pourrais utiliser la classe ArrayList par exemple. Mais il me semble qu'il existe d'autres classes plus adaptées sous Android (mais mes connaisances s'arrêtent là à ce sujet). Ensuite, pour remplir la liste tu feras une boucle du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for(int rowIndex=0; rowIndex<=sheet.getLastRowNum(); rowIndex++) {
     
           Row row = sheet.getRow(rowIndex);
           // créer une instance de la classe qui représente une ligne en lisant les cellules de row
           // ajouter cette instance dans la liste
     
    }
    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.

  4. #4
    Membre très actif
    Profil pro
    Inscrit en
    Février 2010
    Messages
    767
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 767
    Par défaut
    ou LinkedList ... tout dépens de l'usage après.

  5. #5
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2014
    Messages
    154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2014
    Messages : 154
    Par défaut
    oulala...

    avec mes très très faible connaissance en java il va falloir que je me renseigne sur tous cela par ce que c'est plus que flou pour l'instant...

    après je n'ai pas vraiment besoin de les stocker pour un utilisation ultérieure, la seul choses que je voudrait c'est les afficher et de pouvoir les différencier (les row de mon fichier) pour savoir la ou les ligne sélectionner dans mon affichage.

    donc si je résume bien ma prochaine étape et de stocker mon fichier dans une array c'est ça?

    en tous cas merci beaucoup pour vos info cela me permet de m'aiguiller la moindre par ce que comme je le disais je suis un débutant en java c'est la première app que je développe et du coup la première fois que je touche a du java..

  6. #6
    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
    Citation Envoyé par der43e Voir le message
    après je n'ai pas vraiment besoin de les stocker pour un utilisation ultérieure, la seul choses que je voudrait c'est les afficher
    Dans ce cas, tu as juste à faire la boucle, sans stocker les lignes : tu les traites directement dans la boucle.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for(int rowIndex=0; rowIndex<=sheet.getLastRowNum(); rowIndex++) {
     
           Row row = sheet.getRow(rowIndex);
           // traiter...
     
    }
    Ou par forEach :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for(Row row : sheet) {
     
          // traiter
     
    }
    C'est le plus simple, le plus concis (seulement tu n'as pas d'index de ligne : si tu dois traiter chaque ligne indépendamment des autres et de leur place dans l'ensemble, ça reste le mieux).

    Il y a également la solution par iterateur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for(Iterator<Row> rowIterator = sheet.iterator(); rowIterator.hasNext();) {
     
            Row row = rowIterator().next(); 
     
    }
    Enfin, il y a les streams, mais l'API POI ne délivre pas encore directement de stream : c'est donc un peu plus complexe, donc pas d'avantage pour toi.


    Les mêmes mécanismes sont applicables pour parcourir les cellules d'une ligne.
    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.

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

Discussions similaires

  1. Word chaque ligne de mes fichiers dans une variable (VBS)
    Par rouletabille63 dans le forum VBScript
    Réponses: 5
    Dernier message: 16/02/2016, 15h54
  2. [PowerShell] Récupérer chaque ligne d'un pipeline dans une variable
    Par Eveanne dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 05/06/2015, 16h16
  3. Réponses: 1
    Dernier message: 08/07/2013, 22h59
  4. Récupérer chaque ligne de type enregistrement dans une table
    Par atporfi dans le forum Administration
    Réponses: 2
    Dernier message: 02/04/2008, 19h12
  5. ligne de fichier txt dans une variable
    Par suya95 dans le forum Langage
    Réponses: 2
    Dernier message: 25/07/2006, 10h14

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