Importer d un fichier excel dans une base de données mysql

Résolu
intel42 Messages postés 18 Date d'inscription mardi 19 juillet 2011 Statut Membre Dernière intervention 12 août 2011 - 26 juil. 2011 à 16:07
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 - 29 juil. 2011 à 21:28
bonjour,
je suis débutante en java.Il m'a été demandé d'importer un fichier excel dans une base de données mysql.
J'utilise des javabeans pour faire le mapping entre le monde objet et relationnel.Je travaille avec POI.Chaque feuille de mon fichier excel correspond à une table de ma base et les cellules du fichier excel sont associées aux champs de leurs tables respectives.
j'ai le code suivant :
public class toto extends classe X ( elle permet de recuperer le fichier excel de faire un upload du fichier ) {

public toto{
}

// Lecture des feuilles du fichier excel
public void persitExcelDataFrom(String xlsPath) throws IOException {

String filename ="C:chemin de l endroit ou se trouve le fichier excel";
POIFSFileSystem fileSystem;


try {

fileSystem = new POIFSFileSystem(new FileInputStream(filename));

HSSFWorkbook workBook = new HSSFWorkbook(fileSystem);
HSSFSheet vers = workBook.getSheetAt(0);
HSSFSheet pro = workBook.getSheetAt(1);
HSSFSheet pre = workBook.getSheetAt(1);
HSSFSheet sauv = workBook.getSheetAt(3);
for (int i = 38; i < 42; i++)
for (int j = 0; j < 21; j++) {
HSSFRow row = pro.getRow(i);
HSSFCell cell = row.getCell(j);
Object value = ContenuCellule(cell);
Object[][] o = null;
o[i][j] = value;
System.out.println("la valeur est : " +value);
}


} catch (IOException e) {
}

}

private Object ContenuCellule(HSSFCell cell) {
Object value = null;
if (cell == null) {
value = null;
} else if (cell.getCellType() == HSSFCell.CELL_TYPE_BOOLEAN) {
value = cell.getBooleanCellValue();
} else if (cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC) {
value = cell.getCellNum();
} else if (cell.getCellType() == HSSFCell.CELL_TYPE_STRING) {
value = cell.getStringCellValue();
}
return value;
}

}

19 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
27 juil. 2011 à 15:46
Si rien ne s'affiche dans la console, il n'y a qu'une seule solution : il y a eu une IOExcpetion de levée : ajoutes dans le catch la ligne suivante e.printStackTrace() pour récupérer la trace de l'erreur :
catch (IOException e) {
    e.printStackTrace();
}


Et remplaces
public toto{
}

par

public toto(){
    super();
}


Enleves ca :( elle permet de recuperer le fichier excel de faire un upload du fichier )
3
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
27 juil. 2011 à 16:05
Tu as également des erreurs avec les ==. Le signe == compare les références. Sur les objets, il faut utiliser la méthode equals.

Par exemple
String s1="chaine";
String s2="chaine";
System.out.println(s1==s2);//Affiche faux car les references de s1 et s2 sont différentes
System.out.println(s1.equals(s2));//Affiche vrai car le contenu de s1 et de s2 est le meme
3
intel42 Messages postés 18 Date d'inscription mardi 19 juillet 2011 Statut Membre Dernière intervention 12 août 2011 6
27 juil. 2011 à 14:26
remarque constructive merci.
Je dois développer une classe qui me permet ( après le chargement du fichier excel -> via upload ) d'enregistrer les données dans la base de données.De plus le fichier est composé de 4 feuilles:
1) je dois récupérer une cellule ( contenant la version du fichier excel ) bon ça je vais me débrouiller toute seule.
Pour les autres feuilles(2-4) : chacune d entre elle correspond a une table de ma base
public class toto extends classe X ( elle permet de recuperer le fichier excel de faire un upload du fichier ) {

public toto{
}

// Lecture des feuilles du fichier excel
public void persitExcelDataFrom(String xlsPath) throws IOException {

String filename ="C:chemin de l endroit ou se trouve le fichier excel";
POIFSFileSystem fileSystem;


try {

fileSystem = new POIFSFileSystem(new FileInputStream(filename));

HSSFWorkbook workBook = new HSSFWorkbook(fileSystem);
HSSFSheet vers = workBook.getSheetAt(0);
HSSFSheet pro = workBook.getSheetAt(1);
HSSFSheet pre = workBook.getSheetAt(1);
HSSFSheet sauv = workBook.getSheetAt(3);
for (int i = 38; i < 42; i++)
for (int j = 0; j < 21; j++) {
HSSFRow row = pro.getRow(i);
HSSFCell cell = row.getCell(j);
Object value = ContenuCellule(cell);
Object[][] o = null;
o[i][j] = value;
System.out.println("la valeur est : " +value);
}


} catch (IOException e) {
}

}

private Object ContenuCellule(HSSFCell cell) {
Object value = null;
if (cell == null) {
value = null;
} else if (cell.getCellType() == HSSFCell.CELL_TYPE_BOOLEAN) {
value = cell.getBooleanCellValue();
} else if (cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC) {
value = cell.getCellNum();
} else if (cell.getCellType() == HSSFCell.CELL_TYPE_STRING) {
value = cell.getStringCellValue();
}
return value;
}

} 
1
intel42 Messages postés 18 Date d'inscription mardi 19 juillet 2011 Statut Membre Dernière intervention 12 août 2011 6
27 juil. 2011 à 15:17
dsl l erreur dans la console est :
Exception in thread "main" java.lang.NullPointerException
at com.package.projet.controller.toto.persitExcelDataFrom(toto.java:47)-> ligne HSSFCell cell = row.getCell(j);
at com.package.projet.controller.toto.main(toto.java:110)->ligne poiExample.persitExcelDataFrom(xlsPath);


et voici le main :
public static void main(String[] args) throws IOException {
toto poiExample = new toto();


String xlsPath ="chemin du fichier ";

poiExample.persitExcelDataFrom(xlsPath);
} 
1

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

Posez votre question
intel42 Messages postés 18 Date d'inscription mardi 19 juillet 2011 Statut Membre Dernière intervention 12 août 2011 6
27 juil. 2011 à 15:59
l erreur persiste j'ai l impression que row est null donc qu il n 'y a pas de ligne à ce numéro là.Mais j ai bien regardé mon fichier excel il y a bien une ligne qui contient des informations à la ligne 37 case A donc en informatique cela correspond à i = 38 et j = 0 n 'est ce pas ?
1
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
27 juil. 2011 à 16:02
Je n'avais pas mis à jour la page, je n'ai donc pas vu ton deuxième message.

Une NullPoiunterException signifie que tu appelles une méthode sur un objet qui est null.

Par exemple :
String n = null;
System.out.println(n.length());


Dans ton code, tu fais
Object[][] o = null;
o[i][j] = value;


Je remplacerait les deux boucles imbriquées par :

Object[][] o = new Obect[42][21];
for (int i = 38; i < 42; i++)
   for (int j = 0; j < 21; j++) {
      HSSFRow row = pro.getRow(i);
      HSSFCell cell = row.getCell(j);
      Object value = ContenuCellule(cell);
      o[i][j] = value;
      System.out.println("la valeur est : " +value);
}
1
intel42 Messages postés 18 Date d'inscription mardi 19 juillet 2011 Statut Membre Dernière intervention 12 août 2011 6
27 juil. 2011 à 16:21
eurêka ! ça marche j ai des valeurs dans ma console ....merci
par contre j'ai une cellule avec le chiffre 32 il m'affiche 18 je ne comprends pas trop
1
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
28 juil. 2011 à 08:37
Bonjour,

Tu dois afficher la mauvaise cellule, essayes avec un tableau exemple de voir dans quel ordre les boucles imbriquées parcourent la page excel.

Et vérifie si tu es bien sur la bonne feuille.
1
intel42 Messages postés 18 Date d'inscription mardi 19 juillet 2011 Statut Membre Dernière intervention 12 août 2011 6
28 juil. 2011 à 10:03
j'affiche bien les bonnes cellules mais j'ai deux pb :
1) pour un nombre 32 il me lit 18 1->19 et 1->20 j'ai comme l impression qu il me retourne j et non le contenu de la cellule ou alors du code ascii
2)Dans une cellule avec une chaine de caractères avec des majuscules il me retourne la valeur null....
donc je ne comprends pas trop
1
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
28 juil. 2011 à 11:48
Ha oui, je n'avais pas pensé à ca, excel utilise un fichier binaire et pas un fichier texte.

Ce qu'il t'affiche n'est donc pas forcément identique à ce qu'il enregistre. Là, je ne vois pas comment tu peux t'en sortir.
1
intel42 Messages postés 18 Date d'inscription mardi 19 juillet 2011 Statut Membre Dernière intervention 12 août 2011 6
28 juil. 2011 à 12:06
bon pour la cellule de type formule comme je sais qu elle contient une chaine de caractére je lui demande de me retourner une chaine de caractéres par le code suivant
if(cell.getCellType() ==HSSFCell.CELL_TYPE_FORMULA){
value = cell.getStringCellValue();

mais pour les chiffres qui sont définis en standard je ne vois pas du tout
merci pour ton aide
quelqu un voit comment je peux faire ( sans changer le type des cellules directement sous excel )?
1
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
28 juil. 2011 à 15:21
Je te conseil de poser une nouvelle question sur le forum pour deux raisons : ton problème est différent donc on change de sujet. Et en plus, si d'autres personnes ouvrent ce sujet, ils ne liront pas tout et n'arriveront jamais jusqu'ici.
1
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
29 juil. 2011 à 21:28
J'ai accepté les réponses les plus pertinentes pour faciliter les recherches futures.
1
intel42 Messages postés 18 Date d'inscription mardi 19 juillet 2011 Statut Membre Dernière intervention 12 août 2011 6
26 juil. 2011 à 16:09
ah j ai oublié merci d avance pour l aide que vous m apporterez
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
27 juil. 2011 à 08:28
Bonjour,

Deuxième fois que tu poses cette question...

Alors, demandes toi pourquoi tu n'as pas eu de réponse la première fois. C'est tout simplement parce que tu ne poses pas de question, en tout cas, je ne la voit pas, tu nous dis ce que tu veux faire, tu nous donne ton code mais tu ne poses pas de question.

Pourtant, c'est quelque chose d'assez simple à faire je pense que tu auras des réponses si tu poses une question.

Juste une remarque : si tu utilises phpmyadmin pour gérer ta base, il a une fonctionnalité qui lui permet d'importer des fichier cvs directement...
0
intel42 Messages postés 18 Date d'inscription mardi 19 juillet 2011 Statut Membre Dernière intervention 12 août 2011 6
27 juil. 2011 à 13:46
@julien : dsl d avoir mis deux fois mon txt .....
pour toi qu est ce qui est assez simple ? ce que je dois faire ?
alors encore toutes mes excuses c un oubli involontaire de ma part ca ne t es jamais arrivé ?
ensuite pour preuve que tu n as pas lu mon message .. j utilise mysql ( c est ce qui est marqué à la 3eme ligne .... c une volonté établi des le depart du projet )et oui j ai vu qu il y avait cela en php mais je fonctionne ( ce n est pas volonté ) avec my sql java ....
entre temmps je me suis rendu compte que je n avais pas de main ( oui oui c une erreur stupide mais je débute et non sans mal) alors j en ai rajouté un voici le code :
public static void main(String[] args) throws IOException {
toto poiExample = new toto();


String xlsPath ="chemin du fichier ";

poiExample.persitExcelDataFrom(xlsPath);
}
et pour finir ma question est : pourquoi dans ma console je n affiche rien
merci d'avance pour vos remarques constructives et pertinentes
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
27 juil. 2011 à 13:55
phpMyAdmin ne signifie pas que tu utilises du php. phpMyAdmin fonctionne avec une base de données mySQL, j'ai donc bien lu ton message.

Quand je réponds à une de tes question, c'est pour t'aider, si tu refuses mon aide, c'est ton problème, je ne t'en dirai pas plus.
0
intel42 Messages postés 18 Date d'inscription mardi 19 juillet 2011 Statut Membre Dernière intervention 12 août 2011 6
27 juil. 2011 à 14:03
je ne refuse pas ton aide relis mon message ...Je suis débutante en informatique et tu me parles de php sans pour autant me préciser que tu peux l utiliser avec my sql.Comment veux tu que je le sache ? Je suis débutante et je me tourne vers les forums parce que autour de moi quand je pose des questions "on" me donne des réponses obscures non complètes.C'est bien dommage que tu le prennes ainsi je ne demande qu à apprendre ... Je sais bien que tu y réponds pour m aider c le but de forum il me semble ... on s entraide .....Maintenant si tu le prends ainsi que veux tu que je te dise que je te supplie ne me réponds plus alors .... relis ma dernière phrase "merci d'avance pour vos remarques constructives et pertinentes"
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
27 juil. 2011 à 14:16
Bon arrêtons de nous prendre la tête et essayons de résoudre ce problème :

Deux solutions :
- Soit tu as un projet qui consiste à développer une application qui consiste à introduire les lignes d'un fichier excel dans une base de données et dans ce cas poste ton code en utilisant les balises (troisième bouton en partant de la droite) et expliques moi ce qui se passe exactement : as tu une erreur si oui quelle est sa trace (dans la console en rouge) ?

- Soit ce n'est pas le cas et essayes d'installer phpMyAdmin sur ton poste de travail et de trouver un tutoriel pour le faire fonctionner (très simple)
0
Rejoignez-nous