Importer d un fichier excel dans une base de données mysql [Résolu]

intel42 18 Messages postés mardi 19 juillet 2011Date d'inscription 12 août 2011 Dernière intervention - 26 juil. 2011 à 16:07 - Dernière réponse : cs_Julien39 6449 Messages postés mardi 8 mars 2005Date d'inscription 15 mars 2018 Dernière intervention
- 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;
}

}
Afficher la suite 

19 réponses

Répondre au sujet
cs_Julien39 6449 Messages postés mardi 8 mars 2005Date d'inscription 15 mars 2018 Dernière intervention - 27 juil. 2011 à 15:46
+3
Utile
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 )
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_Julien39
cs_Julien39 6449 Messages postés mardi 8 mars 2005Date d'inscription 15 mars 2018 Dernière intervention - 27 juil. 2011 à 16:02
+3
Utile
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);
}
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_Julien39
cs_Julien39 6449 Messages postés mardi 8 mars 2005Date d'inscription 15 mars 2018 Dernière intervention - 27 juil. 2011 à 16:05
+2
Utile
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
Commenter la réponse de cs_Julien39
intel42 18 Messages postés mardi 19 juillet 2011Date d'inscription 12 août 2011 Dernière intervention - 26 juil. 2011 à 16:09
0
Utile
ah j ai oublié merci d avance pour l aide que vous m apporterez
Commenter la réponse de intel42
cs_Julien39 6449 Messages postés mardi 8 mars 2005Date d'inscription 15 mars 2018 Dernière intervention - 27 juil. 2011 à 08:28
0
Utile
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...
Commenter la réponse de cs_Julien39
intel42 18 Messages postés mardi 19 juillet 2011Date d'inscription 12 août 2011 Dernière intervention - 27 juil. 2011 à 13:46
0
Utile
@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
Commenter la réponse de intel42
cs_Julien39 6449 Messages postés mardi 8 mars 2005Date d'inscription 15 mars 2018 Dernière intervention - 27 juil. 2011 à 13:55
0
Utile
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.
Commenter la réponse de cs_Julien39
intel42 18 Messages postés mardi 19 juillet 2011Date d'inscription 12 août 2011 Dernière intervention - 27 juil. 2011 à 14:03
0
Utile
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"
Commenter la réponse de intel42
cs_Julien39 6449 Messages postés mardi 8 mars 2005Date d'inscription 15 mars 2018 Dernière intervention - 27 juil. 2011 à 14:16
0
Utile
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)
Commenter la réponse de cs_Julien39
intel42 18 Messages postés mardi 19 juillet 2011Date d'inscription 12 août 2011 Dernière intervention - 27 juil. 2011 à 14:26
0
Utile
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;
}

} 
Commenter la réponse de intel42
intel42 18 Messages postés mardi 19 juillet 2011Date d'inscription 12 août 2011 Dernière intervention - 27 juil. 2011 à 15:17
0
Utile
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);
} 
Commenter la réponse de intel42
intel42 18 Messages postés mardi 19 juillet 2011Date d'inscription 12 août 2011 Dernière intervention - 27 juil. 2011 à 15:59
0
Utile
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 ?
Commenter la réponse de intel42
intel42 18 Messages postés mardi 19 juillet 2011Date d'inscription 12 août 2011 Dernière intervention - 27 juil. 2011 à 16:21
0
Utile
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
Commenter la réponse de intel42
cs_Julien39 6449 Messages postés mardi 8 mars 2005Date d'inscription 15 mars 2018 Dernière intervention - 28 juil. 2011 à 08:37
0
Utile
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.
Commenter la réponse de cs_Julien39
intel42 18 Messages postés mardi 19 juillet 2011Date d'inscription 12 août 2011 Dernière intervention - 28 juil. 2011 à 10:03
0
Utile
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
Commenter la réponse de intel42
cs_Julien39 6449 Messages postés mardi 8 mars 2005Date d'inscription 15 mars 2018 Dernière intervention - 28 juil. 2011 à 11:48
0
Utile
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.
Commenter la réponse de cs_Julien39
intel42 18 Messages postés mardi 19 juillet 2011Date d'inscription 12 août 2011 Dernière intervention - 28 juil. 2011 à 12:06
0
Utile
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 )?
Commenter la réponse de intel42
cs_Julien39 6449 Messages postés mardi 8 mars 2005Date d'inscription 15 mars 2018 Dernière intervention - 28 juil. 2011 à 15:21
0
Utile
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.
Commenter la réponse de cs_Julien39
cs_Julien39 6449 Messages postés mardi 8 mars 2005Date d'inscription 15 mars 2018 Dernière intervention - 29 juil. 2011 à 21:28
0
Utile
J'ai accepté les réponses les plus pertinentes pour faciliter les recherches futures.
Commenter la réponse de cs_Julien39

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.