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 :

Ajout caractère contenu Excel


Sujet :

Documents Java

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 66
    Points : 50
    Points
    50
    Par défaut Ajout caractère contenu Excel
    Bonjour,

    J'ouvre un fichier Excel pour importer ses éléments dans ma Base de données avec le langage Java.
    Je rencontre un problème sur une colonne contenant des heures. Le format est personnalisé "hh:mm:ss".

    Quand je change le format en standard, l'heure se met en format numérique entrainant un bug dans mon code.

    Je souhaiterai forcer le format des heures en ajoutant un apostrophe dans les cellules ou en forçant le contenu dans ma variable Java.

    Est ce que vous avez des idées?
    Merci de votre aide!

    Voici mon code:
    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
     
    InputStream inp = new FileInputStream(Fichier);
    // recupère le fichier excel
    XSSFWorkbook wb = new XSSFWorkbook(inp);
    //HSSFWorkbook wb = new HSSFWorkbook(inp);
    // Recupére page 1 du fichier xls
    XSSFSheet sheet = wb.getSheetAt(0);
    // nombre de ligne
     int nbLigne = sheet.getPhysicalNumberOfRows()-1;
     
    for (int i=1;i<=nbLigne ; i++ ) {
     
        SimpleDateFormat sdf = new SimpleDateFormat("hh:mm:ss");
        java.util.Date date = sdf.parse(heure.toString());
        java.sql.Time sqlHeure = new Time(date.getTime()); //Heure format SQL
     
    }

  2. #2
    Modérateur
    Avatar de MasterMbg
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2011
    Messages
    719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2011
    Messages : 719
    Points : 1 493
    Points
    1 493
    Par défaut
    Salut,
    Si je comprends bien, tu veux enregistrer l'heure contenue dans une colonne (Excel) dans la base de données?
    Si oui, peux tu poster un exemple de l'heure qui provient de la feuille excel stp?

    Citation Envoyé par maxoup Voir le message
    Quand je change le format en standard, l'heure se met en format numérique entrainant un bug dans mon code.
    Si tu pouvais aussi poster l'erreur qui est affichée dans la console.

    Merci

    Christian
    Plus tu apprends sérieusement, plus tu te rapproches d'un savoir noble. Une chose est certaine, les difficultés ne s'écarteront de ton chemin...

    Tu es nouveau dans le développement Android, la page des COURS est là pour te faciliter la vie
    Tu peux trouver la réponse à ta question dans la FAQ
    Retrouvez mon tutoriel sur la consommation des services web SOAP
    Pense à voter positivement en appuyant sur en bas à droite de la réponse qui t'a donné une piste de solution.

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 66
    Points : 50
    Points
    50
    Par défaut
    Merci de votre réponse.

    Dans le fichier Excel, l'heure est comme ceci : 06:36:00 avec le format cellule personnalisé "hh:mm:ss".

    Java lit la valeur en format numérique : 0,275.

    Lorsque je remet en format date Java, il bug car il trouve une date correspondant au 31 décembre 1889.
    J'imagine qu'il ne connait pas de date inférieur au 1r janvier 1970.

    Voici l'erreur:
    java.text.ParseException: Unparseable date: "31-déc.-1899"

    Elle est déclenché à la ligne :
    java.util.Date date = sdf.parse(heure.toString());

    Je souhaiterai empêcher la lecture en format numérique.

    Merci de votre aide!

  4. #4
    Modérateur
    Avatar de MasterMbg
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2011
    Messages
    719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2011
    Messages : 719
    Points : 1 493
    Points
    1 493
    Par défaut
    Dans le fichier Excel, l'heure est comme ceci : 06:36:00 avec le format cellule personnalisé "hh:mm:ss".
    Java lit la valeur en format numérique : 0,275.
    Comment procèdes-tu pour récupérer la colonne contenant l'heure (Code)?

    Christian,
    Plus tu apprends sérieusement, plus tu te rapproches d'un savoir noble. Une chose est certaine, les difficultés ne s'écarteront de ton chemin...

    Tu es nouveau dans le développement Android, la page des COURS est là pour te faciliter la vie
    Tu peux trouver la réponse à ta question dans la FAQ
    Retrouvez mon tutoriel sur la consommation des services web SOAP
    Pense à voter positivement en appuyant sur en bas à droite de la réponse qui t'a donné une piste de solution.

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 66
    Points : 50
    Points
    50
    Par défaut
    J'ai oublié des lignes dans mon premier post.
    Je récupère le contenu grâce à la ligne "row.getCell(5);

    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
    InputStream inp = new FileInputStream(Fichier);
    // recupère le fichier excel
    XSSFWorkbook wb = new XSSFWorkbook(inp);
    //HSSFWorkbook wb = new HSSFWorkbook(inp);
    // Recupére page 1 du fichier xls
    XSSFSheet sheet = wb.getSheetAt(0);
    // nombre de ligne
     int nbLigne = sheet.getPhysicalNumberOfRows()-1;
     
    for (int i=1;i<=nbLigne ; i++ ) {
     
        // recuperation de chaque ligne
        XSSFRow row = sheet.getRow(i);
        // Récupération heure
        XSSFCell heure= row.getCell(5);
     
        SimpleDateFormat sdf = new SimpleDateFormat("hh:mm:ss");
        java.util.Date date = sdf.parse(heure.toString());
        java.sql.Time sqlHeure = new Time(date.getTime()); //Heure format SQL
     
    }

  6. #6
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 66
    Points : 50
    Points
    50
    Par défaut
    J'ai essayé une solution mais j'ai encore des difficultées.

    Je souhaite récupérer l'heure en format chiffre (ex:0,274) pour retraduire en heure:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    String hchaine=heure.toString();
    Double hD=Double.parseDouble(hchaine);
    Heure = Math.round(hD * 24)
    Minute = Math.round(((hD-Heure*0,041667)/0,41667)*60)
    Ensuite, je compose une chaine pour obtenir "06:36:00"

    Or, J'ai l'erreur suivante qui se déclenche à la ligne qui convertis le contenu de la cellule en Double : "31-déc.-1899".

    Pourquoi je récupère "31-déc.-1899" au lieu de 0,274?

    Merci de votre aide!

  7. #7
    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 : 54
    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
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Pourquoi ne pas récupérer tout simplement la date dans la cellule, puis en extraire les informations que tu veux (par Calendar, ou java.time)


    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    if (cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC)
        if (HSSFDateUtil.isCellDateFormatted(cell) {
            final Date date = cell.getDateCellValue(); 
            int hour = LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault()).getHour();
        }
    }
    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.

  8. #8
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 66
    Points : 50
    Points
    50
    Par défaut
    Bonjour,

    Je n'ai pas Java 8 sur mon ordi.
    Est ce que je tu peux me donner les fonctions équivalentes entre java.time et calendar, stp?

  9. #9
    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 : 54
    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
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par maxoup Voir le message
    Je n'ai pas Java 8 sur mon ordi.
    Et tu ne peux pas l'installer ? (Java 7 n'est plus supporté par Oracle depuis avril)

    Est ce que je tu peux me donner les fonctions équivalentes entre java.time et calendar, stp?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Calendar cal = Calendar.getInstance();
    cal.setTime(date);
    int hour = cal.get(Calendar.HOUR_OF_DAY);
    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.

  10. #10
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 66
    Points : 50
    Points
    50
    Par défaut
    Bonjour,

    J'ai téléchargé Java 8 ce week-end.

    Je constate qu'il y a un soucis lors de la conversion de mon heure en un point instant (to.instant).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    heure = row.getCell(5);
    if (heure.getCellType() == HSSFCell.CELL_TYPE_NUMERIC){
    	if (HSSFDateUtil.isCellDateFormatted(heure)) {
    		final Date date = heure.getDateCellValue(); 
    		System.out.println(date);
    La valeur date me récupère bien l'heure: Sun Dec 31 06:36:00 CET 1899

    Mais quand je récupère l'heure et les minutes dans des variables, il trouve 5h45.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
      hour = LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault()).getHour();
      minute= LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault()).getMinute();		        
     }
    }
    System.out.println("Heure " +hour+ " Minute : " +minute);
    Je ne pense pas que c'est un problème de fuseau horaire.

    Avez vous une idée?

    Merci d'avance.

  11. #11
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 66
    Points : 50
    Points
    50
    Par défaut
    J'ai trouvé la solution!

    Je ne pensais pas que c'étais un problème de fuseau horaire car j'avais testé ceci : ZoneId.of("Europe/Paris").

    Mais j'ai obtenu le bon résultat avec ceci:ZoneId.of("GMT+1").

    Est ce que je n'aurai pas un problème avec les dates quand on sera en hiver?

    Cdlt.

  12. #12
    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 : 54
    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
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Je pense que le problème vient du faire que l'année est 1899 et que la timezone soit CET, une timezone qui ne prend pas en compte justement la notion de DST (Daylight Saving Time — dit "Heure d'été" en France). L'Instant lui est en temps universel (UTC).

    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 {
     
       SimpleDateFormat sfInput = new SimpleDateFormat("dd/MM/yyyy hh:mm zzz");
       Date d = sfInput.parse("31/12/1899 6:35 CET");
       System.out.println(LocalDateTime.ofInstant(d.toInstant(), ZoneId.of("CET")).format(DateTimeFormatter.ofPattern("hh:mm")));
       System.out.println(LocalDateTime.ofInstant(d.toInstant(), ZoneId.systemDefault()).format(DateTimeFormatter.ofPattern("hh:mm")));
     
    } catch(ParseException e) {
       e.printStackTrace();
    }
     
    try {
     
        SimpleDateFormat sfInput = new SimpleDateFormat("dd/MM/yyyy hh:mm zzz");
        Date d = sfInput.parse("31/12/2015 6:35 CET");
        System.out.println(LocalDateTime.ofInstant(d.toInstant(), ZoneId.of("CET")).format(DateTimeFormatter.ofPattern("hh:mm")));
        System.out.println(LocalDateTime.ofInstant(d.toInstant(), ZoneId.systemDefault()).format(DateTimeFormatter.ofPattern("hh:mm")));
     
    } catch(ParseException e) {
        e.printStackTrace();
    }
    Affichent
    06:35
    05:44
    06:35
    06:35
    
    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.

  13. #13
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 66
    Points : 50
    Points
    50
    Par défaut
    Merci pour votre aide!

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

Discussions similaires

  1. Connaitre le nbre de caractère contenu dans une cellule Excel
    Par darkspoilt dans le forum VBA Access
    Réponses: 1
    Dernier message: 04/09/2007, 10h19
  2. [C#] Assembly pour ajouter un graphique excel dans ma form
    Par bossun dans le forum Windows Forms
    Réponses: 4
    Dernier message: 12/06/2006, 17h04
  3. Réponses: 3
    Dernier message: 27/02/2006, 18h53
  4. [VBA-A] Ajouter une feuille Excel
    Par kissmytoe dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 23/02/2006, 15h54
  5. ajouter le contenu d'un dossier ftp à une bdd
    Par lioudow dans le forum Requêtes
    Réponses: 2
    Dernier message: 16/11/2005, 19h46

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