Annonce

Inscriptions terminées.

#1 31-03-2005 10:51:18

papy
Mega Power Member
Date d'inscription: 03-11-2004
Messages: 302

[JExcel API][java]Pour info

Pour info, l'api JExcel est super simple.
10 minutes pour comprendre le fonctionnement, avec en plus un super tutoriel integré au zip de l'api (bon, en anglais, mais relativement clair).

En gros, pour modifier un fichier Excel existant, on fait une copie que l'on peut nommer comme on le souhaite, et on modifie la copie.

Code:

public class TestExcel 
{
    
    

    public static void main(String[] args)  
    {
        
        try
        {
            Workbook workbook = Workbook.getWorkbook(new File("de.xls"));//fichier source 
            WritableWorkbook copy = Workbook.createWorkbook(new File("output.xls"), workbook);//copie du fichier source 
            WritableSheet sheet2 = copy.getSheet(0);//on travail sur la feuile n°1 
            WritableCell cell = sheet2.getWritableCell(6, 1);//numero de cellule (6,1) = (G,2) 
                        
            if (cell.getType() == CellType.LABEL)//si le type de cellule est non-numérique (String) 
            {
                String content = cell.getContents();
                System.out.println("contenu actuel :"+ content);  
                Label lab = (Label) cell; 
                lab.setString("Test de moification"); 
            }
            
            else
            {
                System.out.println("echec d'ecriture :"+cell.getType()); 
                
            }
            copy.write(); 
            copy.close(); 


            
            System.out.println("Action terminée");


        }
        catch(IOException e)
        {
            System.out.println(e); 
        }
        
        catch(WriteException e)
        {
            System.out.println(e); 
        }
        catch(BiffException e)
        {
            System.out.println(e); 
        }
        
    }
    

}

Le seul et unique "MEGA Power Member" à être papa!
Java, ce qui differentie les hommes, des jeunes garçons...

Hors ligne

 

#2 31-03-2005 11:35:47

yoda
Mega Power Member
Date d'inscription: 10-11-2004
Messages: 127

Re: [JExcel API][java]Pour info

Bien joué Papy.
Par contre pourquoi tu fais pas un catch(Exception e) ca t'eviterais de tapper 50 fois la mm chose?

Hors ligne

 

#3 31-03-2005 13:22:18

papy
Mega Power Member
Date d'inscription: 03-11-2004
Messages: 302

Re: [JExcel API][java]Pour info

yoda a écrit:

Bien joué Papy.
Par contre pourquoi tu fais pas un catch(Exception e) ca t'eviterais de tapper 50 fois la mm chose?

Parce que j'ai enlevé les instructions que j'effectue selon l'exception levée dans le code que j'ai posté.
Mais on peut effectivement rassembler les exceptions dans un seul catch.


Le seul et unique "MEGA Power Member" à être papa!
Java, ce qui differentie les hommes, des jeunes garçons...

Hors ligne

 

#4 31-03-2005 18:59:45

Borusse
Mega Power Member
Date d'inscription: 09-11-2004
Messages: 175

Re: [JExcel API][java]Pour info

non laisse comme cela, c'est plus clair et plus dans l'idée objet de lever une exception specifique, enfin c'est mon avis


Papy tu n'es plus the only one "Power Member"

I'm the only one  "Powerfull Membré"

Hors ligne

 

#5 31-03-2005 21:30:19

papy
Mega Power Member
Date d'inscription: 03-11-2004
Messages: 302

Re: [JExcel API][java]Pour info

Ha, le combat des chefs va commencer....FIGHT !!!!


Le seul et unique "MEGA Power Member" à être papa!
Java, ce qui differentie les hommes, des jeunes garçons...

Hors ligne

 

#6 21-02-2006 14:11:37

louis
Membre
Date d'inscription: 21-02-2006
Messages: 10

Re: [JExcel API][java]Pour info

Bonjour tout le monde je suis un petit nouveau smile
Je suis actuellement en stage et je travaille sur la migration de eSpreadSheet vers POI ou JExcel.
Avant de pouvoir migrer je dois vérifier certains points prérequis, et la je cale.

Alors mon problème, sur Excel on peut "breaker" une cellule en rajoutant une apostrophe devant sa saisie, exemple : 'exemple.

Mon problème arrive quand je veux récupérer une date breakée ('26/09/06 ou '26 déc 2006 ...) le type de la cellule m'interdit de récupérer la cellule en tant que DateCell, car c'est une LabelCell.
Donc j'essaye de faire un bricolage, pour copier cette cellule sur une autre feuille Excel pour me débarasser de l'appostrophe et retrouver le bon type mais cela ne fonctionne pas.

La solution idéal serait un moyen de faire reconnaître par Excel le format date automatiquement via la "Barre de formule".

Si jamais quelqu'un à une solution je suis tout ouïe.

Merci par avance

Louis

Hors ligne

 

#7 23-02-2006 15:53:51

louis
Membre
Date d'inscription: 21-02-2006
Messages: 10

Re: [JExcel API][java]Pour info

J'ai trouvé une solution : j'utilise une fonction d'Excel : DATEVAL() qui à partir d'une date au format string, l'interprète, et donne une date au format Excel : un double. Puis j'utilise la fonction HSSFDateUtil.getJavaDate( ) pour la conversion au format Java.
Le petit problème c'est que je triche un peu, j'utilise une formule présaisie sur une feuille Excel car je n'arrive pas a en rentrer une moi même : cell.setCellFormula("DATEVAL(A1)").
En tout cas ca marche, mais si quelqu'un a une idée pour la saisie de formule je lui en serai très reconnaissant.

Louis

Hors ligne

 

#8 23-02-2006 21:23:19

papy
Mega Power Member
Date d'inscription: 03-11-2004
Messages: 302

Re: [JExcel API][java]Pour info

Je pense que tu te compliques la vie...
A moins que tes celules sur le fichier Excel soit de type "Date", il suffit de récuperer sous un type String le contenu de tes cellules du fichier Excel.

C'est seulement ensuite que tu peux caster tes String en Date, ou Util.Date, etc... ou faire toute les modifications de formes que tu veux à tes String, comme éliminer ou ajouter une apostrophe, ou changer la synthaxe, etc.

Dernière modification par papy (23-02-2006 21:23:40)


Le seul et unique "MEGA Power Member" à être papa!
Java, ce qui differentie les hommes, des jeunes garçons...

Hors ligne

 

#9 24-02-2006 09:06:34

louis
Membre
Date d'inscription: 21-02-2006
Messages: 10

Re: [JExcel API][java]Pour info

En fait j'y ai pensé à ça, le problème c'est que je veux les dates aux formats acceptés par Excel. Si je parse ou caste mes dates avec Java je ne suis pas sur qu'en entrée j'ai une date au format Excel. Je dois par exemple ignorer le type de date dd.mm.yyyy.
En fait cet exemple n'est pas parlant car java n'accepte pas ce format non plus. Par contre sous la forme dd/mm/yyyy java ne l'accepte pas.


En tout cas merci pour la réponse

Hors ligne

 

#10 24-02-2006 15:59:06

louis
Membre
Date d'inscription: 21-02-2006
Messages: 10

Re: [JExcel API][java]Pour info

Finalement : je n'ai pas le droit d'utiliser un autre document Excel, donc ma solution d'écrire dans un autre fichier c'est pas la peine. Il faudrait idélament pouvoir ouvrir le fichier Excel en lecture/ecriture pour pouvoir faire des modifications directement dessus mais ce n'est pas possible.
Donc je vais tout récupérer en string et faire du parsing en Java. Trop super.

Hors ligne

 

#11 24-02-2006 16:17:15

tangui
Super chef du forum
Lieu: Bourg-lès-Valence -- Lyon
Date d'inscription: 22-10-2004
Messages: 442
Site web

Re: [JExcel API][java]Pour info

salut louis, on dirait que tout le monde est en vacances ici smile
Pour ma part, je n'ai pas touché à excel et à java depuis ma licence, mon aide ne sera pas tres précieuse sad

Edit: j'ai rien dit, papy est tjrs la big_smile


T@nguil y a de la vie...

Hors ligne

 

#12 25-02-2006 11:19:03

papy
Mega Power Member
Date d'inscription: 03-11-2004
Messages: 302

Re: [JExcel API][java]Pour info

louis a écrit:

Par contre sous la forme dd/mm/yyyy java ne l'accepte pas.

??
Il suffit d'indiquer la synthaxe de tes dates à ton parser de format...

Code:

SimpleDateFormat sdf = new SimpleDateFormat( "dd/MM/yyyy" );

Date date_parsee = sdf.parse(date_en_String);

//commentaire:date_parsee = Objet de type Date

Le seul et unique "MEGA Power Member" à être papa!
Java, ce qui differentie les hommes, des jeunes garçons...

Hors ligne

 

#13 25-02-2006 19:55:22

papy
Mega Power Member
Date d'inscription: 03-11-2004
Messages: 302

Re: [JExcel API][java]Pour info

Ou encore, si tu souhaite utiliser un objet de type Date en entrée :

Code:

SimpleDateFormat sdf = new SimpleDateFormat( "dd/MM/yyyy" );

Date date_parsee = sdf.parse(sdf.format(la_date_de_type_Date));

Dernière modification par papy (25-02-2006 19:55:42)


Le seul et unique "MEGA Power Member" à être papa!
Java, ce qui differentie les hommes, des jeunes garçons...

Hors ligne

 

#14 27-02-2006 09:03:35

louis
Membre
Date d'inscription: 21-02-2006
Messages: 10

Re: [JExcel API][java]Pour info

Oui en fait en faisant des recherches j'avais vu ca big_smile Moi je passais par le parser du constructeur de Date().

Bon maintenant il faut que je m'attarde sur tous les formats de dates d'Excel pour pouvoir les parser smile.

Louis

Hors ligne

 

#15 27-02-2006 14:19:15

louis
Membre
Date d'inscription: 21-02-2006
Messages: 10

Re: [JExcel API][java]Pour info

Je me suis fait un tit parser maison avec les Regex smile

Code:

// On définit alors 3 Regex que l'on compile 
Pattern type1 = Pattern.compile("^((0?[1-9])|(1\\d)|(2\\d)|(3[0-1]))\\/((0?[1-9])|(1[0-2])|([a-z_é]{3,9}))\\/(([0-9][0-9])|([1-2]\\d\\d\\d))$");
Pattern type2 = Pattern.compile("^((0?[1-9])|(1\\d)|(2\\d)|(3[0-1]))\\-((0?[1-9])|(1[0-2])|([a-z_é]{3,9}))\\-(([0-9][0-9])|([1-2]\\d\\d\\d))$");
Pattern type3 = Pattern.compile("^((0?[1-9])|(1\\d)|(2\\d)|(3[0-1]))(\\s)([a-z_é]{3,9})(\\s)(([0-9][0-9])|([1-2]\\d\\d\\d))$");
//On va également définir 3 moteurs de recherches
Matcher matchT1 = type1.matcher(chaine);
Matcher matchT2 = type2.matcher(chaine);
Matcher matchT3 = type3.matcher(chaine);
//On regarde les résultats
boolean resT1 = matchT1.find();
boolean resT2 = matchT2.find();
boolean resT3 = matchT3.find();

Par la suite je fais du bricolage un peu sur les mois, et finalement en fonction du séparateur (/,  - ou espace) je fais un tit SimpleDateFormat. Et voilou smile

Mais bon j'ai l'impression de réinventer la roue.

Dernière modification par louis (27-02-2006 15:00:43)

Hors ligne

 

#16 28-02-2006 00:15:12

papy
Mega Power Member
Date d'inscription: 03-11-2004
Messages: 302

Re: [JExcel API][java]Pour info

louis a écrit:

Mais bon j'ai l'impression de réinventer la roue.

Difficile de te répondre car je ne sais pas vraiment ce que tu veux faire !
Les dates de ton fichier excel ne sont pas formatées ?
Elles peuvent être différentes ?
...je ne vois pas le pourquoi de tes expressions régulières en fait...


Le seul et unique "MEGA Power Member" à être papa!
Java, ce qui differentie les hommes, des jeunes garçons...

Hors ligne

 

#17 28-02-2006 11:57:21

louis
Membre
Date d'inscription: 21-02-2006
Messages: 10

Re: [JExcel API][java]Pour info

En fait sur mon fichier excel j'ai différent format de date : dd/mm/yy, dd-mm-yy, ddmmyyyy ...
Les dates rentrées par l'utilisateur peuvent être breakées (avec une ' devant la date ex : '25/05/06) ce qui fait que la date n'est pas reconnu, et que le type de la cellule est considéré comme String.
Cela ne permet pas à Excel d'interpréter lui même la date, je dois donc le faire. D'où l'idée d'un parser, qui ne sert on va dire qu'à repérer les séparateur et le format de la date (pas reconnu par Excel dans ce cas là).
Ensuite j'utilise les objets java pour les dates pour finir le travail.

Voila

Hors ligne

 

#18 28-02-2006 13:29:31

yoda
Mega Power Member
Date d'inscription: 10-11-2004
Messages: 127

Re: [JExcel API][java]Pour info

Petite question bonus,

pourquoi le fichier excel n'est pas uniformisé avant de le parser? Parceque bon c'est bien de tout anticiper mais si l'utilisateur s'appele boulet il a qu'à écriré 27Fev2005 du temps qu'on y est.
S'il sait deja qu'il faut saisir la date sur un certain format c'est deja l'essentiel non?

Bon j'ai compris, je sors -->[]

Hors ligne

 

#19 28-02-2006 13:36:42

louis
Membre
Date d'inscription: 21-02-2006
Messages: 10

Re: [JExcel API][java]Pour info

Le truc c'est que le fichier Excel est créé par différentes entreprises, donc ça ne dépend même pas de nous. Il faut juste que nous le traitions rapidement.

Hors ligne

 

#20 28-02-2006 13:51:36

yoda
Mega Power Member
Date d'inscription: 10-11-2004
Messages: 127

Re: [JExcel API][java]Pour info

Ok c'etait juste la question du jour, ne connaissant pas le contexte je ne voyait pas l'intéret de se casser la tête sur un format de date.
Par contre je ne suis pas le spécialiste des regex mais elles sont pas un peu longues la?

Hors ligne

 

#21 28-02-2006 14:14:02

louis
Membre
Date d'inscription: 21-02-2006
Messages: 10

Re: [JExcel API][java]Pour info

Elle me permet de prendre en compte les jours de (0)1 à 31 les mois de (0)1 à 12 ou en lettre (je fais la vérification après) et les années sur 2 ou 4 chiffres.
Avec différents séparateurs smile

Dernière modification par louis (28-02-2006 14:15:02)

Hors ligne

 

#22 28-02-2006 20:58:31

papy
Mega Power Member
Date d'inscription: 03-11-2004
Messages: 302

Re: [JExcel API][java]Pour info

yoda a écrit:

Petite question bonus...

Mes hommages mon maitre...


Le seul et unique "MEGA Power Member" à être papa!
Java, ce qui differentie les hommes, des jeunes garçons...

Hors ligne

 

#23 01-03-2006 09:11:35

yoda
Mega Power Member
Date d'inscription: 10-11-2004
Messages: 127

Re: [JExcel API][java]Pour info

Lol Papy, au niveau java je ne pense plus bien être le maitre de quoi que ce soit vu le temps depuis lequel j'en ai pas fait mais bon de l'objet reste de l'objet :p

sinon ok pour tes regex par contre tu n'a aucun moyen de verifier si le gars tape 31/02/2006 mais bon il faut quand même un minimum de discipline chez l'utilisateur (aussi si l'utilisateur saisi 02-18-06:format US là tu peux rien faire) ;-)
C'est quand même tordu les dates quand tu peux rien imposer aux utilisateurs :p
Donc bon courage et j'espère que tout merchera comme tu l'as préparé(mais vive la formation des utilisateurs :p)

Hors ligne

 

#24 01-03-2006 11:13:33

louis
Membre
Date d'inscription: 21-02-2006
Messages: 10

Re: [JExcel API][java]Pour info

Normalement je ne reçois que du format français. Pour la concordance au niveau Jour/Mois simpleDateFormat traduit un 30/02/06 en 02/03/06. Donc au pire ce que je peux faire c'est comparer le jour d'entrée et de sortie, et indiquer une erreur smile
Sinon faire ca à la main, je l'avais fait l'année dernière pour une application de gestion des congés.

Hors ligne

 

#25 22-10-2007 16:52:47

audrey974
Nouveau membre
Date d'inscription: 22-10-2007
Messages: 0

Re: [JExcel API][java]Pour info

Bonjour,

Je débute en java et j'ai un peu de mal.

Je dois récupérer des données d'un fichier xls.

J'ai bien vu comment faire pour récupérer les données d'une cellule, mais comment fait-on pour récupérer toutes les données de la feuille, lorsqu'on ne sait pas commbien de ligne et de colonne on a ?

Merci de votre aide

Audrey

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Classement Internet