JExcel API, problème de performance, besoin d'aide urgent

HoLyJava Messages postés 4 Date d'inscription lundi 20 juin 2011 Statut Membre Dernière intervention 21 juin 2011 - 20 juin 2011 à 05:46
HoLyJava Messages postés 4 Date d'inscription lundi 20 juin 2011 Statut Membre Dernière intervention 21 juin 2011 - 21 juin 2011 à 03:27
Bonjour à tous,

Nouveau sur le forum, je sollicite votre aide comme un dernier espoir pour m'aider dans un problème insoluble.
J'utilise l'API Jexcel, dans le but unique de lire un fichier excel.
Le problème que je rencontre est la longueur de chargement d'un gros volume de données dans une matrice.
Mon fichier excel final devrait avoir un maximum de 800.000 colonnes pour 20 colonnes.
Pour l'instant, mes tests se font sur un fichier de 30.000 lignes et 10 colonnes, et le fichier contient uniquement un entier dans chaque case.
Pourtant, le chargement prend entre 15 et 20 minutes à se faire !!!

Mon code n'a rien de particulier, mais à titre indicatif, c'est le suivant :

Workbook workbook2 = null;
try {
workbook2 = Workbook.getWorkbook(new File("essai20.xls"));
} catch (IOException ex) {
Logger.getLogger(JFrameMain.class.getName()).log(Level.SEVERE, null, ex);
} catch (BiffException ex) {
Logger.getLogger(JFrameMain.class.getName()).log(Level.SEVERE, null, ex);
}
Sheet sheet2 = workbook2.getSheet(0);

int e = sheet2.getRows();
int f = sheet2.getColumns();
int [][] tempessai = new int [e][f];
Cell xa;
NumberCell nxa;

for (int l = 0; l< f; l++)
{
for (int m = 0; m< sheet2.getColumn(l).length; m++)
{
xa = sheet2.getCell(0,l);
nxa = (NumberCell) xa;
tempessai[m][l] = (int)nxa.getValue();
}
}



Vous êtes mon dernier espoir... :)

7 réponses

cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
20 juin 2011 à 09:11
La version 2007 d'excel tolère un plus grand nombre de lignes, par contre les versions antérieurs n'autorisent pas des tableaux de 800000 lignes.
0
HoLyJava Messages postés 4 Date d'inscription lundi 20 juin 2011 Statut Membre Dernière intervention 21 juin 2011
20 juin 2011 à 14:44
Bonjour,

Merci de ta réponse.
Pour l'instant, au-delà de traiter ce problème de nombre de ligne (qui n'en ai pas un, car je peux double les colonnes, limitées à 16.000, pour simuler la présence de 800.000 lignes), je m'intéresse au temps d'exécution monstrueux, comme expliqué précédemment, du stockage dans une matrice de seulement 30.000 lignes et 10 colonnes.
C'est cette performance désastreuse que d'une part je ne comprend pas, et d'autre part je n'arrive pas à changer..

Merci à tous :)
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
20 juin 2011 à 15:56
Si tu utilisais un fichier texte, tu irais surement plus vite. Si ton code n'est pas trop long, écris le et je regarderai s'il n'y a pas d'optimisation possible.
0
HoLyJava Messages postés 4 Date d'inscription lundi 20 juin 2011 Statut Membre Dernière intervention 21 juin 2011
20 juin 2011 à 17:15
Bonjour Julien,

Mon code est disponible dans mon premier poste, au-dessus.

Merci pour votre aide !
0

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

Posez votre question
cs_GodConan Messages postés 2113 Date d'inscription samedi 8 novembre 2003 Statut Contributeur Dernière intervention 6 octobre 2012 12
20 juin 2011 à 18:45
salut,

La limite en lignes de excel est de 64k ;o) pour l'avoir explosé plus d une fois ;o) .... Cependant je n ai pas testé les version superieur à 2003... ;o)

Sinon, en passant par les fonction excel externe c est forcement plus lent ;o) ... je n ai jamais pue tester les limites de cette API.
Ceci un rapide parcours ;o) m a permis d y localiser la class CSV qui te permet de creer un xls à partir d un csv ;o)
;o) donc au lieu d apeller les methodes laborieuses d'insertion de cellule : tu généres un fichier CSV, pour 16k d'enregistrements cela tiendra surement dans la seconde ;o) vu les disques et procésseur actuel ;o) , ensuite
tu creer à partir de ce fichier ton fichier excel ;o) (et tu peux effacer le .csv si il le faut) , si l api est bien faite cela devrait etre nettement plus rapide ;o)

GodConan ;o)
0
cs_GodConan Messages postés 2113 Date d'inscription samedi 8 novembre 2003 Statut Contributeur Dernière intervention 6 octobre 2012 12
20 juin 2011 à 18:46
;o) j oubliai, tout est la.... ;o)

http://jexcelapi.sourceforge.net/resources/javadocs/2_6_10/docs/index.html


GodConan ;o)
0
HoLyJava Messages postés 4 Date d'inscription lundi 20 juin 2011 Statut Membre Dernière intervention 21 juin 2011
21 juin 2011 à 03:27
Merci pour la piste. Je teste ça et je vous tiens au courant ! :)
0
Rejoignez-nous