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 :

Projet Java - petite base de données Excel


Sujet :

Documents Java

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 12
    Points : 5
    Points
    5
    Par défaut Projet Java - petite base de données Excel
    Bonjour, je suis actuellement en première année de BTS informatique, et j'ai en cette fin d'année l'obligation de réaliser un stage en entreprise.
    En cette première semaine de stage, mon tuteur ma confié la tâche de réaliser un petit programme java à l'aide de Netbeans, le projet a pour but de
    gérer des réservations d'anniversaires et de centres. Une sorte de classeur/agenda

    Les données devront être enregistré sur un fichier excel sur le reseau local (.xlsx), je me demandais si c'était envisageable aisément a l'aide d'apache POI.

    J'ai réalisé très simplement toute l'interface graphique nécessaire a l'aide de plusieurs Jpanel présent dans la même Jframe (Cardlayout)...
    J'aurais donc besoin que mon programme sache lire/écrire dans les cellules de mon classeur. (lecture a l'ouverture, écriture a l'action d'un bouton)
    Lire afin de pouvoir afficher dans mon application les réservations déjà effectué, sur un Jcalendar, afin de savoir les jours complet, les places disponibles....
    Ecrire afin de pouvoir ajouter de nouvelles informations (présentes dans des Jtextfield par exemple) ou supprimer des réservations annulé, ce genre de chose.

    Je ne sais réellement pas comment m'y prendre une fois l'aspect graphique terminé, comment présenter le fichier excel, faire des feuilles séparées, la marche à suivre, j'ai très peu d’expérience et tout conseil/aide sera bonne à prendre !

    Merci à vous, un bon week end.

  2. #2
    Membre chevronné
    Avatar de eulbobo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2003
    Messages
    786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2003
    Messages : 786
    Points : 1 993
    Points
    1 993
    Par défaut
    Citation Envoyé par lucasmoreau22 Voir le message
    Les données devront être enregistré sur un fichier excel sur le reseau local (.xlsx), je me demandais si c'était envisageable aisément a l'aide d'apache POI.
    Je dirais même que c'est idéal pour écrire des fichiers Excel de manière simple !



    J'aurais donc besoin que mon programme sache lire/écrire dans les cellules de mon classeur. (lecture a l'ouverture, écriture a l'action d'un bouton)
    On reste sur du POI ici...

    Lire afin de pouvoir afficher dans mon application les réservations déjà effectué, sur un Jcalendar, afin de savoir les jours complet, les places disponibles....
    Ecrire afin de pouvoir ajouter de nouvelles informations (présentes dans des Jtextfield par exemple) ou supprimer des réservations annulé, ce genre de chose.

    Je ne sais réellement pas comment m'y prendre une fois l'aspect graphique terminé, comment présenter le fichier excel, faire des feuilles séparées, la marche à suivre, j'ai très peu d’expérience et tout conseil/aide sera bonne à prendre !
    Là ça se complique.... Pour pouvoir te répondre, j'aurai deux questions :
    - est-ce que plusieurs personnes vont utiliser le programme en même temps à partir du même fichier. Si oui, tu vas avoir des gros problèmes liés aux accès concurrents !
    - pourquoi gérer des feuilles séparées dans ton fichier Excel?
    Je ne suis pas mort, j'ai du travail !

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par eulbobo Voir le message
    Là ça se complique.... Pour pouvoir te répondre, j'aurai deux questions :
    - est-ce que plusieurs personnes vont utiliser le programme en même temps à partir du même fichier. Si oui, tu vas avoir des gros problèmes liés aux accès concurrents !
    - pourquoi gérer des feuilles séparées dans ton fichier Excel?
    Le programme ne sera ouvert que sur un seul poste à la fois, les gros problèmes semblent donc évités !
    Je pensais gérer une feuille pour les réservations d'anniversaires, une autre pour les réservations des centres. Mais effectivement, la taille d'une feuille de classeur excel ne
    semble pas réellement avoir de limite, c'est tout à fait envisageable de les concentrées sur la même.

  4. #4
    Membre chevronné
    Avatar de eulbobo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2003
    Messages
    786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2003
    Messages : 786
    Points : 1 993
    Points
    1 993
    Par défaut
    Citation Envoyé par lucasmoreau22 Voir le message
    Le programme ne sera ouvert que sur un seul poste à la fois, les gros problèmes semblent donc évités !
    Tu as pas idée....

    Je pensais gérer une feuille pour les réservations d'anniversaires, une autre pour les réservations des centres. Mais effectivement, la taille d'une feuille de classeur excel ne semble pas réellement avoir de limite, c'est tout à fait envisageable de les concentrées sur la même.
    Je voulais savoir s'il y avait un intérêt fonctionnel/organisationnel à ce que tu utilises plusieurs feuilles différentes. Ta réponse me fait dire que oui, alors reste dans cette optique !


    Du coup il ne reste que les problématiques de liens entre tes données et ton interface graphique?
    Ce que j'ai envie de te conseiller, c'est d'utiliser tes feuilles Excel comme les tables d'une base de données : stocke sur chaque ligne les informations que tu stockerai dans une table (pour une réservation, tu stockes la date de début et la date de fin)

    Commence par faire un modèle Objet représentant les données que tu vas manipuler. Ensuite, ben ça dépend beaucoup des données et de ce que tu veux en faire !
    Je ne suis pas mort, j'ai du travail !

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 12
    Points : 5
    Points
    5
    Par défaut Modification fichier existant
    Bonjour, je reviens vous solliciter de l'aide.

    Effectivement, je pense qu'il ne reste plus que les problématiques de liens entre les données du classeur et mon interface graphique. Mais je pense que cela va être la partie la plus complexe du programme.

    Je me suis un peu intéressé à apache POI, j'ai trouver comment créer un classeur constituer de plusieurs feuilles, et d'écrire dans les cellules de celle-ci avec java, cependant, mon code me permet simplement de "créer" c'est à dire que je sais écrire dans les cellules de chaque feuilles, mais lorsque je modifie les informations(dans mon code), et que je run à nouveau le .java il me créer de nouvelle feuille avec de nouvelle cellules, et m'écrase donc les anciennes données. Il s'agit simplement d'une fonction de "génération" je suppose, et je ne parviens pas a trouver les commandes pour modifier les cellules que je souhaite d'un fichier déja existant.

    Ci joint, le petit bout de code qui me permet de générer mes feuilles, et d'y inséré des donnée(de simple nombre pour mes test) :

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    package textexcel;
     
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import org.apache.poi.hssf.usermodel.HSSFCell;
    import org.apache.poi.hssf.usermodel.HSSFRow;
    import org.apache.poi.hssf.usermodel.HSSFSheet;
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
     
    public class nouvellecellule {
     
        public static void main(
          String[] args) {
     
        HSSFWorkbook wb = new HSSFWorkbook();
        HSSFSheet sheet = wb.createSheet("ENFANTS");
        HSSFSheet sheet2 = wb.createSheet("ADOS");
        HSSFSheet sheet3 = wb.createSheet("CENTRES");
     
        HSSFRow row = sheet.createRow(0);
        HSSFCell cell = row.createCell((short)0);
        cell.setCellValue(25);
        row.createCell((short)1).setCellValue(50);
     
        HSSFRow row2 = sheet2.createRow(1);
        HSSFCell cell2 = row2.createCell((short)0);
        cell2.setCellValue(50);
        row2.createCell((short)1).setCellValue(100);
     
        HSSFRow row3 = sheet3.createRow(2);
        HSSFCell cell3 = row3.createCell((short)0);
        cell3.setCellValue(200);
        row3.createCell((short)1).setCellValue(500);
     
        FileOutputStream fileOut;
        try {
          fileOut = new FileOutputStream("monclasseur.xls");
          wb.write(fileOut);
          fileOut.close();  
        } catch (FileNotFoundException e) {
          e.printStackTrace();
        } catch (IOException e) {
          e.printStackTrace();
        }
      }
    }

  6. #6
    Membre chevronné
    Avatar de eulbobo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2003
    Messages
    786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2003
    Messages : 786
    Points : 1 993
    Points
    1 993
    Par défaut
    Dans ton code, au début, tu fais new HSSFWorkbook().... Donc tu repars de zéro à chaque fois avec ce code !

    Chaque fois que tu fais un new, tu crées un nouveau truc qui efface ce qui existait avant


    Essayes avec un truc comme ça pour lire les données (et ensuite, tu pourras en rajouter ou des modifier, mais n'oublie pas, new, ça écrase ce qui existait)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    FileInputStream file = new FileInputStream(new File("C:\\monfichierexcel.xls"));
    // lecture du fichier excel             
    HSSFWorkbook workbook = new HSSFWorkbook(file);
     
    // premiere feuille
    HSSFSheet sheet = workbook.getSheetAt(0);
     
    // iterateur sur les lignes
    Iterator<row> rowIterator = sheet.iterator();
     
    // iterateur sur les cellules de la ligne
    Iterator<cell> cellIterator = row.cellIterator();
    Je ne suis pas mort, j'ai du travail !

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Effectivement, je recréer par dessus à chaque fois !

    C'est cool pour le bout de code que tu ma filé, malheureusement j'ai pas réussi à le fonctionnait, en cherchant justement des explications sur le web, j'ai trouver un autre morceau un peu plus imposant qui lui fonctionne sans problème, il accède bien à mon fichier excel déja créer, et lit les informations présente dessus. Ca donne quelque chose comme ça :

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    package textexcel;
     
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.util.Iterator;
    import org.apache.poi.hssf.usermodel.HSSFCell;
    import org.apache.poi.hssf.usermodel.HSSFRow;
    import org.apache.poi.hssf.usermodel.HSSFSheet;
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    import org.apache.poi.poifs.filesystem.POIFSFileSystem;
     
    public class lectureexcel {
     
        public static void main(
          String[] args) {
     
        try {
          POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream("monclasseur.xls"));
          HSSFWorkbook wb = new HSSFWorkbook(fs);
          HSSFSheet sheet = wb.getSheetAt(0);
          HSSFRow row = null;
          HSSFCell cell = null;
          double totalLigne = 0.0;
          double totalGeneral = 0.0;
          int numLigne = 1;
     
          for (Iterator rowIt = sheet.rowIterator(); rowIt.hasNext();) {
            totalLigne = 0;
            row = (HSSFRow) rowIt.next();
            for (Iterator cellIt = row.cellIterator(); cellIt.hasNext();) {
              cell = (HSSFCell) cellIt.next();
              totalLigne += cell.getNumericCellValue();
            }
            System.out.println("total ligne "+numLigne+" = "+totalLigne);
            totalGeneral += totalLigne;
            numLigne++;
          }
          System.out.println("total general "+totalGeneral);
     
        } catch (FileNotFoundException e) {
          e.printStackTrace();
        } catch (IOException e) {
          e.printStackTrace();
        }
      }
    }
    run:
    total ligne 1 = 8660.0
    total ligne 2 = 150.0
    total general 8810.0
    BUILD SUCCESSFUL (total time: 1 second)
    J'ai globalement compris comment fonctionné ce petit bout, même si certain point restent assez vague ( " = null ", par exemple ), peu importe, le principale objectif était de pouvoir lire mes données, ça avance dans le bon sens. Je vais donc chercher a modifié un peu le code afin de pouvoir lire seulement une ou deux cellules dont j'aurais besoin, pas toutes une ligne puisqu'il y aura principalement des nom et des dates...

    A ce propos, j'aurais aimé savoir a l'ajout d'une reservation, en admettent qu'on puisse avoir jusqu’à 6 réservations par jour (simultanément, une seule tranche d’horaire possible), si il y avait possibilité, de mettre une date dans la cellule (par exemple) A1, puis dans A2 la première reservation, A3 la seconde, A4 et ainsi de suite jusqu'a 6. En "testant" la cellule A2, si elle n'est pas vierge cela signifiera qu'il y a deja une reservation, dans ce cas on test la suivante (A3) même chose si c'est libre, on insère la réservation, sinon on passe a la ligne suivante, si les 6 sont occupé, alors le programme nous indiquerait simplement " complet " ? J'ai du mal a expliqué mon idée...

  8. #8
    Membre chevronné
    Avatar de eulbobo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2003
    Messages
    786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2003
    Messages : 786
    Points : 1 993
    Points
    1 993
    Par défaut
    Citation Envoyé par lucasmoreau22 Voir le message
    A ce propos, j'aurais aimé savoir a l'ajout d'une reservation, en admettent qu'on puisse avoir jusqu’à 6 réservations par jour (simultanément, une seule tranche d’horaire possible), si il y avait possibilité, de mettre une date dans la cellule (par exemple) A1, puis dans A2 la première reservation, A3 la seconde, A4 et ainsi de suite jusqu'a 6. En "testant" la cellule A2, si elle n'est pas vierge cela signifiera qu'il y a deja une reservation, dans ce cas on test la suivante (A3) même chose si c'est libre, on insère la réservation, sinon on passe a la ligne suivante, si les 6 sont occupé, alors le programme nous indiquerait simplement " complet " ? J'ai du mal a expliqué mon idée...
    Quand tu as une ligne (HSSFRow), tu peux utiliser la méthode getLastCellNum() qui te renverra l'index de la "dernière cellule+1". En gros, s'il y a 4 cellules, ça te renverra 5.
    Si ta limite est à 6 cellules remplie : tu peux ajouter à l'index indiqué par la méthode getLastCellNum(). Sinon tu renvoies ton erreur.
    Quand tu veux enlever une date, tu utilises la méthode removeCell
    Je ne suis pas mort, j'ai du travail !

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par eulbobo Voir le message
    Quand tu as une ligne (HSSFRow), tu peux utiliser la méthode getLastCellNum() qui te renverra l'index de la "dernière cellule+1". En gros, s'il y a 4 cellules, ça te renverra 5.
    Si ta limite est à 6 cellules remplie : tu peux ajouter à l'index indiqué par la méthode getLastCellNum(). Sinon tu renvoies ton erreur.
    Quand tu veux enlever une date, tu utilises la méthode removeCell
    C'est une option qui me sera fort utile probablement, merci.
    Mais tu parles ici de cellules, présente sur la même ligne, la même fonction est possible en fonction des colonnes ? Ça m'obligera à redessiner mon classeur en fonction sinon...

  10. #10
    Membre chevronné
    Avatar de eulbobo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2003
    Messages
    786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2003
    Messages : 786
    Points : 1 993
    Points
    1 993
    Par défaut
    Vu que je ne connais pas la structure de tes données, j'ai naïvement pensé que tu parlais de données en lignes et non en colonnes :p

    Tu ne peux pas réellement traiter en colonnes : il faut déjà accéder à une ligne avec de pouvoir accéder à la liste des cellules qui la compose
    Je ne suis pas mort, j'ai du travail !

  11. #11
    Membre éprouvé
    Avatar de Cafeinoman
    Homme Profil pro
    Couteau suisse d'une PME
    Inscrit en
    Octobre 2012
    Messages
    628
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Couteau suisse d'une PME

    Informations forums :
    Inscription : Octobre 2012
    Messages : 628
    Points : 1 256
    Points
    1 256
    Par défaut
    Si ta base n'est pas trop grosse, une option que tu peux envisager est de charger en mémoire au démarrage et de "persister" a la sauvegarde. Tu crée une Map par ligne/colonne (selon ta structure), avec tes entêtes comme clef. Ensuite pour chaque feuille tu fait une List des Map obtenue. Ça te permet de gérer tout ça avec les API java standard, notamment stream qui te permettra de faire des filtres, reduce et autre...
    Mais attention, fait des test sur de gros volumes, parce que ça peut vite devenir gourmand en mémoire. Mais d'expérience, en dessous de 1000 ligne ça pas tranquillement.
    «Dieu ne joue pas aux dés.» - Albert Einstein. Et pan! 30 ans de retard dans la théorie quantique!
    «Tout n'est pas politique, mais la politique s'intéresse à tout.» - Nicolas Machiavel. Et surtout à ceux qui ne s'y intéressent pas.

  12. #12
    Membre chevronné
    Avatar de eulbobo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2003
    Messages
    786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2003
    Messages : 786
    Points : 1 993
    Points
    1 993
    Par défaut
    De la pratique que j'en ai, sur des gros tableaux justement, ça consomme pas tant de mémoire que ça les objets HSSF !
    Par contre, le gros avantage de passer par un découplage (HSSF -> Structure Map/List -> HSSF) est effectivement de pouvoir permettre par la suite de changer de système de stockage des données (en utilisant une base de données même petite, genre Derby ou HsqlDB)
    Je ne suis pas mort, j'ai du travail !

  13. #13
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Bien le bonjour et merci pour tout vos conseils !
    J'ai bien avancé dans mon projet ces dernier jours, je suis parvenu à écrire dans la page que je souhaité, au jour voulu. (j'ai simplement réagencé ma base pour avoir les date en colonne et les donnée en ligne, beaucoup plus pratique)
    Il me reste un gros point à résoudre, le test de cellules, j'aimerai en effet, créer une sorte de boucle, qui compte le nombre de case non vide sur ma ligne et qui incrémente une variable (b) a chaque réponse positif (cellule non vide) et s'arrête dès qu'elle trouve une cellule vide.
    Les cellules ne sont pas adjacentes. Je vous donne un exemple pour que ça doit plus clair :

    Exemple :
    Sur ma ligne 3, je veux tester les cellules 5, 10, 15 et 20.

    b = 0
    si 5 = vide alors ; b =0
    si 5 = non vide et 10 = vide ; b = 1
    si 5 = non vide 10 = non vide et 15 = vide ; b = 2
    ....

    C'est possible avec POI d'après vous ? J'ai pas mis la main sur quelque chose similaire pendant mes recherches.

  14. #14
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 12
    Points : 5
    Points
    5
    Par défaut personne ?
    J'ai continuer a chercher, en vain...

    Il me faudrait également la possibilité de faire une recherche de certains mot dans mon classeur. J'aimerai par exemple pouvoir recherche le mot " complet " dans mes feuilles excel, et que le programme me réponde un numéro de ligne et de colonne pour chaque cellule contenant ce mot. (et si possible les enregistré dans une variable)

    Une fois c'est deux derniers points maîtrisé, il me sera probablement possible de terminé aisément mon application.
    Dernière ligne droite, j'ai besoin de votre aide! merci d'avance

    Cordialement, Lucas

  15. #15
    Membre chevronné
    Avatar de eulbobo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2003
    Messages
    786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2003
    Messages : 786
    Points : 1 993
    Points
    1 993
    Par défaut
    Citation Envoyé par lucasmoreau22 Voir le message
    Exemple :
    Sur ma ligne 3, je veux tester les cellules 5, 10, 15 et 20.

    b = 0
    si 5 = vide alors ; b =0
    si 5 = non vide et 10 = vide ; b = 1
    si 5 = non vide 10 = non vide et 15 = vide ; b = 2
    ....

    C'est possible avec POI d'après vous ? J'ai pas mis la main sur quelque chose similaire pendant mes recherches.
    Ben... Tu as fait l'algo là, avec un exemple... Possible avec ou sans POI ^^
    Dans l'objet HSSFRow, tu as une méthode getCell(int) qui te permet de récupérer une cellule à un index donné, et une méthode getCell(int, Row.MissingCellPolicy) qui te permet différentes options de récupération de la cellule pour déterminer si elle est vide ou pas.

    En gros, ben tu as ce bout de code
    HSSFCell cell = row.getCell(i, Row.RETURN_BLANK_AS_NULL);
    Qui te renvoie une cellule non nulle si la cellule n'est pas vide, ou null si la cellule n'existe pas ou qu'elle est vide !

    https://poi.apache.org/apidocs/org/a...l/HSSFRow.html


    Il me faudrait également la possibilité de faire une recherche de certains mot dans mon classeur. J'aimerai par exemple pouvoir recherche le mot " complet " dans mes feuilles excel, et que le programme me réponde un numéro de ligne et de colonne pour chaque cellule contenant ce mot. (et si possible les enregistré dans une variable)
    Là, il faut que je me penche (un peu plus, j'ai pas sorti la solution précédente de mon chapeau :p) sur l'API mais je pense que ça doit être faisable
    Je ne suis pas mort, j'ai du travail !

  16. #16
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par eulbobo Voir le message

    En gros, ben tu as ce bout de code
    HSSFCell cell = row.getCell(i, Row.RETURN_BLANK_AS_NULL);
    Qui te renvoie une cellule non nulle si la cellule n'est pas vide, ou null si la cellule n'existe pas ou qu'elle est vide !
    Merci de ton aide eulbobo !

    J'arrive a tester plus ou moins la cellule que je veux. Mais j'ai toujours un problème, je dois pas utiliser la fonction correctement, ca fonctionne lorsque la cellule contient des informations, sinon j'ai une belle erreur.
    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
    try {
          POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream("C:\\Users\\lucas\\Desktop\\Projettest.xls"));
          HSSFWorkbook wb = new HSSFWorkbook(fs);
          HSSFSheet sheet = wb.getSheet("ENFANTS");
          Row row = sheet.getRow(1);
     
          Cell cell1 = row.getCell(1, Row.RETURN_BLANK_AS_NULL);
          String test = "" ;
     
            if( cell1.equals(test)) {               
                RESULTAT.setText("cellule vide");
            }
            else{
                RESULTAT.setText("cellule non vide");
            }
     
            } catch (FileNotFoundException e) {
          e.printStackTrace();
        } catch (IOException e) {
          e.printStackTrace();
         }
    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException...
    Je continue mes petits test/recherche et je vous tiens au courant !

  17. #17
    Membre chevronné
    Avatar de eulbobo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2003
    Messages
    786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2003
    Messages : 786
    Points : 1 993
    Points
    1 993
    Par défaut
    Citation Envoyé par lucasmoreau22 Voir le message
    Cell cell1 = row.getCell(1, Row.RETURN_BLANK_AS_NULL);
    String test = "" ;

    if( cell1.equals(test)) {
    RESULTAT.setText("cellule vide");
    }
    ARRRRRGGGGGH !

    Quand je dis que ça renvoie null, ça veut dire, ça renvoie null !
    Et ne compare JAMAIS des objets qui ne sont pas de la même classe avec equals ! (au mieux, ça renverra toujours false...)

    Tu me compares des chaussettes avec un semi remorque là ! (qui n'est pas là d'ailleurs, d'où le problème ^^)


    La, tu as un NullPointerException parce que tu appelles ta méthode equals sur cell1 qui est null (ce qui veut dire que ta cellule est vide)

    Teste avec if (cell1 == null)
    Je ne suis pas mort, j'ai du travail !

  18. #18
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Hannnnn le null(moi aussi), effectivement ça marche BEAUCOUP mieux !

    C'est le genre de chose qui devrait sauter au yeux pourtant, ça viendra avec le temps... j'espère :s

    Merci, ça me permet d'avancer à grand pas dans mon projet.

    Pour ce qui est de la recherche du mot " en attente " je le ferais ligne par ligne en attendant de trouver mieux, je n'aurais au MAXIMUM qu'une trentaines de ligne à éplucher de toute façon.

  19. #19
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 12
    Points : 5
    Points
    5
    Par défaut Conserver paramètres
    Bonjour tous le monde,
    J'ai pu terminé à 99% mon application, tout fonctionne parfaitement.

    Il me reste juste un dernier petit point à résoudre.

    En fait, pour accéder a mon fichier excel, j'indique un chemin dans un JtextField, et j'insère son contenu dans un String " chemin ".

    J'aimerai simplement pouvoir conserver le contenu de se Jtextfield a chaque démarrage de mon application. Afin que chaque poste (et donc chemin différent) ne soit
    pas contraint de repréciser le chemin à chaque lancement de l'application.
    Le CHEMIN.setText(.....) ne fonctionne que pendant la session actuelle, il reset a chaque démarrage.

    Je code en java sous netbeans, merci de votre aide !

  20. #20
    Membre chevronné
    Avatar de eulbobo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2003
    Messages
    786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2003
    Messages : 786
    Points : 1 993
    Points
    1 993
    Par défaut
    L'idée c'est de stocker quelque part cette valeur pour ne pas avoir à la saisir à chaque fois, et cette valeur dépend du poste sur lequel l'application est installée?

    Je te conseillerai d'utiliser Properties pour charger/sauvegarder des propriétés depuis un fichier texte formaté de la forme clé=valeur.
    (si tu cherches un peu, tu devrais trouver pas mal d'exemples sur le forum de son utilisation en lecture, mais aussi en écriture)
    Je ne suis pas mort, j'ai du travail !

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Info : Petit programme VBA avec base de donnée excel
    Par guismoman60 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 21/10/2013, 10h20
  2. Petit conseil pour un projet avec une base de données
    Par PasTaper dans le forum Débuter
    Réponses: 2
    Dernier message: 06/08/2012, 17h05
  3. Projet Automatiser une Base de donnée sous Excel en VBA
    Par raph_13 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 22/10/2011, 16h10
  4. Petite base de donnée sous excel
    Par Denti-fritz dans le forum Excel
    Réponses: 2
    Dernier message: 22/06/2007, 16h21

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