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] Lecture d'une cellule de type date


Sujet :

Documents Java

  1. #1
    Membre confirmé
    Inscrit en
    Juillet 2009
    Messages
    121
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 121
    Par défaut [POI] Lecture d'une cellule de type date
    Bonjour les amis,
    j'ai un problème; je travaille sur une application java (java desktop application) avec netBeans, et je dois lire
    le contenu d'une cellule dans un fichier excel pour la sauvegarder dans une base de données Mysql. Cette cellule est de la forme :
    "jj/MM/aaaa". Je doit la lire en tant que chaine de caractère, mais cela me donne par exemple pour "01/11/2004" la valeur
    "38292"; comment puis-je convertire cette valeur ("38292") une fois obtenue dans la forme "jj/MM/aaaa"?
    N.B: Quand je lie la cellule en tant que date (avec getDatecellValue()) et je formate la date celon le format "jj/MM/aaaa" cela se fait sans problème, mais quand le champs est vide ça me pose des ennuis (cannot get a string value from a numeric cell), donc je fait des tests avant, c'est pour ca que je doit lire la cellule en tant que String (avec getStringCellValue())


    Merci d'avance.

  2. #2
    Membre chevronné
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2004
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2004
    Messages : 265
    Par défaut
    Salut,


    Déja, ce serait pas mal de préciser quelle api tu utilises pour lire ton fichier, selon l'api les solutions peuvent être très différentes.

    Sinon, en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Date maDate = null;
    if(getStringCellValue() != null && !"".getStringCellValue()) {
      maDate = getDatecellValue();
    }
    ça ne passe pas ?

  3. #3
    Membre confirmé
    Inscrit en
    Juillet 2009
    Messages
    121
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 121
    Par défaut
    moi je travaille avec la bibliothèque POI.
    Je vois pas bien ce que vous avez écrit : !"".getStringCellValue() ???

    en testant j'ai écris ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if(ligne.getCell(7).getStringCellValue() != null !"".ligne.getCell(7).getStringCellValue()) {
                                      ss9=ligne.getCell(7).getDateCellValue();
                                }

  4. #4
    Membre confirmé
    Inscrit en
    Juillet 2009
    Messages
    121
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 121
    Par défaut
    si vous voulez écrire :
    if(ligne.getCell(7).getStringCellValue() && != null !ligne.getCell(7).getStringCellValue().equals("")) {
    ss9=ligne.getCell(7).getDateCellValue();
    }

    çca marche pas.


    Aidezzz moi svp les amis

  5. #5
    Membre Expert
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Par défaut
    Essaie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if((ligne.getCell(7).getStringCellValue() != null) && (!"".equals(ligne.getCell(7).getStringCellValue())) {
    ss9=ligne.getCell(7).getDateCellValue();
    }
    a+

  6. #6
    Membre confirmé
    Inscrit en
    Juillet 2009
    Messages
    121
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 121
    Par défaut
    ça marche pas, j'ai toujours l'erreur suivante :
    java.lang.IllegalStateException: Cannot get a text value from a numeric cell

  7. #7
    Membre chevronné
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2004
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2004
    Messages : 265
    Par défaut
    Sur quelle ligne ? le if ?

    Effectivement il me semblait que POI n'était pas "dérangé" par une cellule vide, par contre il doit être géné par un mauvais type dans une cellule.

    A la place du if, essaye :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(ligne.getCell(7).getCellType() != Cell.CELL_TYPE_STRING) {
    (cf. javadoc)

  8. #8
    Membre confirmé
    Inscrit en
    Juillet 2009
    Messages
    121
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 121
    Par défaut
    Merci gailuris, cela m'a donné une idée pour résoudre un autre problème que j'ai. Mais ma question de ce sujet là est la suivante :
    une fois je lie une cellule de type date (jj/MM/aaaa) en String j'ai un nombre, par exemple j'ai '39018' à la place d'avoir '28/10/2006', donc comment je peut convertire ce nombre en date format(jj/MM/aaaa) une fois que j'ai ce nombre là.?
    Merci pour votre aide

  9. #9
    Membre chevronné
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2004
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2004
    Messages : 265
    Par défaut
    Salut,
    Tu dois récupérer le type Date (qui comme dans excel n'est qu'un nombre en interne, au passage) avec la méthode getDatecellValue(), si tu as besoin d'en faire une chaine, utilises un SimpleDateFormat (cf. la FAQ).

  10. #10
    Membre confirmé
    Inscrit en
    Juillet 2009
    Messages
    121
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 121
    Par défaut
    Citation Envoyé par gailuris Voir le message
    Salut,
    Tu dois récupérer le type Date (qui comme dans excel n'est qu'un nombre en interne, au passage) avec la méthode getDatecellValue(), si tu as besoin d'en faire une chaine, utilises un SimpleDateFormat (cf. la FAQ).
    J'ai déjas essayé cela, ça marche, mais une fois il trouve une cellule vide, j'ai une erreur (cannot get a numeric cell from a text cell), tu vois?
    C'est pour cela que je dois lire les cellules en string.

  11. #11
    Membre chevronné
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2004
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2004
    Messages : 265
    Par défaut
    Ben non je vois pas, on vient de faire presque 10 posts pour régler ce problème...

    En gros au final avec un truc dans le style ça doit fonctionner :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    String maDateEnChaine = null;
    if(ligne.getCell(7).getCellType() != Cell.CELL_TYPE_STRING) {
       Date maDate = ligne.getCell(7).getDateCellValue();
       DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
       maDateEnChaine = df.format(maDate);
    }
    // Ici maDateEnChaine est soit null si la cellule est vide, soit contient ta date sous forme de chaine si la cellule contient une date.

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    511
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 511
    Par défaut
    Bonjour
    Ne te tracasse pas de toute façon c'est le bazard, des fois y veut des fois y veut pas.
    Donc solution adoptée avec POI:
    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
    SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yy");
    ...
    valeur = "";
    HSSFCell cell = row.getCell(col);
    //valeur
    try{
         switch(cell.getCellType()) {
             case 1:
                 	valeur = (cell.getRichStringCellValue().getString()).replaceAll("  ", "");
                 	if(valeur.charAt(valeur.length()-1)==32)
                         {valeur = valeur.substring(0,valeur.length()-1);}
                    break;
             case 0:
                 	if(HSSFDateUtil.isCellDateFormatted(cell) | typeChp[col-1]==2)
                         {Date date = new Date(cell.getDateCellValue().getTime());
                           valeur = ""+sdf.format(date);}
                      else
                         {valeur = ""+(int)cell.getNumericCellValue();}
              break;
             }
     }catch(final NullPointerException npe){valeur = "";}
     
    if(valeur.equals("") || valeur.equals(" "))
     	{valeur = null;}
    ...
    Soit le format de ta cellule retourne une date et tout est ok sinon ta date passe à la trappe. Du coups j'ai rajouté un typeChp prédéfini qui force la conversion. La gestion d'erreur permet de rattraper la cellule vide.

Discussions similaires

  1. [POI] Problème de lecture d'une cellule de type date
    Par syrinEn dans le forum Documents
    Réponses: 2
    Dernier message: 29/06/2015, 12h10
  2. [Excel] Lecture d'une cellule date
    Par Lutin1801 dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 24/05/2012, 16h09
  3. JTable : édition d'une cellule de type Date
    Par SheikYerbouti dans le forum Composants
    Réponses: 5
    Dernier message: 08/12/2007, 08h50
  4. comment declarer une variable de type date ?
    Par MAJIK_ENIS dans le forum JDBC
    Réponses: 1
    Dernier message: 26/05/2006, 00h02
  5. Réponses: 14
    Dernier message: 28/10/2005, 18h41

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