Lire dans un excel

rocky_jr Messages postés 8 Date d'inscription mercredi 30 novembre 2005 Statut Membre Dernière intervention 21 décembre 2005 - 3 déc. 2005 à 15:28
cs_ra_gu Messages postés 8 Date d'inscription samedi 5 mai 2007 Statut Membre Dernière intervention 3 septembre 2010 - 11 mai 2007 à 18:26
Bonjour, j'ai un petit problème en Java. Je voudrais lire dans un
fichier Excel pour y extraire des données et les traiter dans un
programme Java.



J'ai bien téléchargé sur andykhan.com la dernière version du package jxl et j'arrive à importer le package.



Mais je n'arrive pas à créer le Workbook.



Alors je crie : HELLLLLPPPPP !!! Merci d'avance à tous ceux qui vondront bien m'aider.





Voici mon code : (Liste_Etudiants.xls étant dans le répertoire courant : celui du projet)



public Vector<String> recuperer_etudiants() throws jxl.read.biff.BiffException

{

Vector<String> ve = new Vector<String>();

try{


Workbook workbook = Workbook.getWorkbook(new
File("Liste_Etudiants.xls")); // Ceci bug et
empèchait la compilation avant que je ne rajoute le try/catch

Sheet sheet = workbook.getSheet(0);


System.out.println(sheet.toString());
// Ca c'est pour tester la lecture

}

catch (IOException e)

{


System.out.print("L'exception " + e.toString() + "s'est produite.");

}

return ve;

}

11 réponses

sheorogath Messages postés 2448 Date d'inscription samedi 21 février 2004 Statut Modérateur Dernière intervention 29 janvier 2010 17
3 déc. 2005 à 18:38
en gros ou ca bug ?

"n'est pas mort ce qui semble a jamais dormir et en d'etrange temps meme la mort peut mourrir"
0
rocky_jr Messages postés 8 Date d'inscription mercredi 30 novembre 2005 Statut Membre Dernière intervention 21 décembre 2005
3 déc. 2005 à 21:14
La ligne suivante me créé une erreur :

Workbook workbook = Workbook.getWorkbook(new File("Liste_Etudiants.xls"));



L'erreur que me dit mon gentil compilateur est :

unreported exception java.io.IOException; must be caught or declared to be thrown
0
rocky_jr Messages postés 8 Date d'inscription mercredi 30 novembre 2005 Statut Membre Dernière intervention 21 décembre 2005
3 déc. 2005 à 21:28
Je viens de tester si la lecture de mon fichier marchait (avec un canRead()), et effectivement il me lit le fichier.



Donc c'est la fonction getWorkbook(File file) qui "merde" si je puis me permettre.



Voici le code de cette fonction qui était inclus dans le package jxl d'andykhan.fr version 2.5.8 si ça peut aider) :

public static Workbook getWorkbook(InputStream is) throws IOException, BiffException

{

return getWorkbook(is, new WorkbookSettings());

}



public static Workbook getWorkbook(InputStream is,
WorkbookSettings ws) throws IOException,
BiffException

{

File dataFile = new File(is, ws);



Workbook workbook = new WorkbookParser(dataFile, ws);

workbook.parse();



return workbook;

}
0
sheorogath Messages postés 2448 Date d'inscription samedi 21 février 2004 Statut Modérateur Dernière intervention 29 janvier 2010 17
3 déc. 2005 à 22:07
ben avec le bloc try catch ca devrai plus deconner no?

"n'est pas mort ce qui semble a jamais dormir et en d'etrange temps meme la mort peut mourrir"
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
rocky_jr Messages postés 8 Date d'inscription mercredi 30 novembre 2005 Statut Membre Dernière intervention 21 décembre 2005
3 déc. 2005 à 22:49
Ben en fait ouais ça marche.



Je suis trop content mais j'ai été un peu con quand même mais bon !



Merci pour ton aide !! A + peut-être !
0
rocky_jr Messages postés 8 Date d'inscription mercredi 30 novembre 2005 Statut Membre Dernière intervention 21 décembre 2005
4 déc. 2005 à 15:12
Maintenant j'ai une autre erreur que je ne comprend pas du tout dans le code suivant :



public Vector<String> recuperer_etudiants() throws jxl.read.biff.BiffException

{

Vector<String> ve = new Vector<String>();



try

{


File file = new File("listeEtudiants_2005_06.xls");


int promo =
1;
// Valeur en dur


Vector v_groupes = new Vector();


v_groupes.add(1);




// Valeur en dur


v_groupes.add(2);



// Valeur en dur




Workbook workbook = Workbook.getWorkbook(file);

Sheet sheet = workbook.getSheet(0);

Integer ligne = 1;

int colonne = 2;


Cell c_promo = sheet.getCell(colonne, ligne);


Cell c_gr = sheet.getCell(colonne + 1, ligne);


while (c_promo.getContents() != null || c_gr.getContents() != null)

{


System.out.println("Ligne courante = " + ligne.toString());


if (c_promo.getType() CellType.NUMBER && c_gr.getType()
CellType.NUMBER)

{


NumberCell nc_promo = (NumberCell) c_promo;


NumberCell nc_gr = (NumberCell) c_gr;


int num_promo = (int) nc_promo.getValue();


int num_gr = (int) nc_gr.getValue();





if (num_promo == promo && v_groupes.contains(num_gr))


{


Cell nom = sheet.getCell(colonne - 2, ligne);


Cell prenom = sheet.getCell(colonne - 1, ligne);


String etudiant = nom.getContents() + " " + prenom.getContents();


ve.add(etudiant);


System.out.println(etudiant + " ajouté.");


}

}

ligne++;


c_promo = sheet.getCell(colonne, ligne);


c_gr = sheet.getCell(colonne + 1, ligne);

}

workbook.close();


System.out.println("Workbook.close() effectué avec succès !");

}

catch (IOException e)

{


System.out.println("L'exception " + e.toString() + "s'est produite.");

}

return ve;

}









J'ai fait des tests d'affichage : tout se lit parfaitement. Il ne passe pas dans le catch.

Quel est le prob me direz-vous ?? Ben en fait à la fin de la boucle, il
s'arrête quand il faut mais ne sort pas et donc ne m'affiche pas
"Workbook.close() effectué avec succès !"



De plus, il m'affiche toujours l'erreur suivante qui se produit toujours à une ligne différente :

Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 185

at jxl.read.biff.SheetImpl.getCell(SheetImpl.java:297)

at Corriger.recuperer_etudiants(Corriger.java:95)

at Corriger.(Corriger.java:143)

at Acceuil.correction(Acceuil.java:127)

at AL_Confirmer.actionPerformed(OptionsCTL.java:89)

at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1849)

at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2169)

at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420)

at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258)

at
javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:234)

at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:231)

at java.awt.Component.processMouseEvent(Component.java:5488)

at javax.swing.JComponent.processMouseEvent(JComponent.java:3126)

at java.awt.Component.processEvent(Component.java:5253)

at java.awt.Container.processEvent(Container.java:1966)

at java.awt.Component.dispatchEventImpl(Component.java:3955)

at java.awt.Container.dispatchEventImpl(Container.java:2024)

at java.awt.Component.dispatchEvent(Component.java:3803)

at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4212)

at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3892)

at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822)

at java.awt.Container.dispatchEventImpl(Container.java:2010)

at java.awt.Window.dispatchEventImpl(Window.java:1774)

at java.awt.Component.dispatchEvent(Component.java:3803)

at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)

at
java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242)

at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)

at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)



Merci d'avance pour votre aide !
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
4 déc. 2005 à 20:22
Salut,



perso je ne connais pas jxl de andykhan.com



mais j'utilise l'api 'poi' de jakarta qui est assez simple

qui permet de lire, ecfrire et modifier un fichier excel



dipo ici : http://jakarta.apache.org/poi/



exemple pour lire une fichier excel:






<meta http-equiv= "Content-Type" content="text/html; charset=UTF-8">
<meta name="Generator" content="Kate, the KDE Advanced Text Editor">

import java.io.FileInputStream;
import java.io.FileNotFoundException;
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;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;




<meta http-equiv ="Content-Type" content= "text/html; charset=UTF-8">
<meta name="Generator" content="Kate, the KDE Advanced Text Editor">

...................................
private String file= "fichier.xls";

public String read(int sheet, int row, short cell) throws FileNotFoundException, IOException{
if(sheet < 0) sheet = 0;
if(row < 0) row = 0;
if (cell < 0) cell = 0;
FileInputStream fis = new FileInputStream(file);
if(fis == null ) return "";
//ouverture du fichier exel
POIFSFileSystem fs = new POIFSFileSystem(fis);
if(fs = = null ) return "";
//création du worbook
HSSFWorkbook wb = new HSSFWorkbook(fs);
if(wb = = null ) return "";
if(sheet > wb.getNumberOfSheets()) return "";
//récupération de la feuille excel
HSSFSheet s = wb.getSheetAt(sheet);
if(s = = null ) return "";
//récupération de la ligne dans la feuille
HSSFRow r = s.getRow(row);
//récupération de la ligne
if(r = = null ) return "";
HSSFCell c = r.getCell(cell);
if(c == null) return "";
//retour de la valeur lue dans la cellule
return c.getStringCellValue();
}

voilou en esperant que ca t'aide



WORA
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
4 déc. 2005 à 20:28
desolé pour le fomattage ca a merdouillé

WORA
0
rocky_jr Messages postés 8 Date d'inscription mercredi 30 novembre 2005 Statut Membre Dernière intervention 21 décembre 2005
4 déc. 2005 à 21:48
En fait j'ai trouvé le bug : le truc c'est que le fichier Excel est pris comme un tableau à 2 dimensions.

Et dans ma condition d'arrêt, je voulais accèder à une cellule vide ce qui m'arrêterait la boucle.

Or cette cellule est hors des limites du tableau ce qui me provoquait l'erreur :

java.lang.ArrayIndexOutOfBoundsException: 185 (185 étant la première ligne hors des limites du tab)



Ma condition d'arrêt doit en fait être :

Workbook workbook = Workbook.getWorkbook(file);

Sheet sheet = workbook.getSheet(0);

int ligne = 1;

int colonne = 2;


Cell c_promo = sheet.getCell(colonne, ligne);


Cell c_gr = sheet.getCell(colonne + 1, ligne);


while (ligne < sheet.getRows())
//
sheet.getRows() me renvoyant le nombre de lignes de la feuille Excel
ici 185

{ ............ }



Merci pour ton aide quand même Twinuts !
0
indiana_jules Messages postés 750 Date d'inscription mardi 9 mars 2004 Statut Membre Dernière intervention 23 décembre 2008 22
6 déc. 2005 à 08:01
0
cs_ra_gu Messages postés 8 Date d'inscription samedi 5 mai 2007 Statut Membre Dernière intervention 3 septembre 2010
11 mai 2007 à 18:26
j ai probleme de lire une fichier excel a partir de java
si quelqu un peut m"aider.
0
Rejoignez-nous