IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Documents Java Discussion :

Inserer les données dun fichier excel dans une table mysql


Sujet :

Documents Java

  1. #1
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2007
    Messages
    310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 310
    Points : 133
    Points
    133
    Par défaut Inserer les données dun fichier excel dans une table mysql
    Bonjour à la communauté,
    je souhaiterai exporter les données d'un fichier excel dans une table mysql.
    J'arrive à récupérer les données mais je ne sais vraiment pas comment les mettre dans ma table. Mon problème est de faire la correspondance entre les valeurs des cellules et celles des attribut de la table.
    Ma table à le même nombre de colonne que mon fichier excel (le nombre de colonne étant variable).

    voici le code me permettant de lire le fichier excel avec l'API POI.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
     
     
    package pOIExample;
     
    import java.io.IOException;
    import java.io.InputStream;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.Iterator;
     
    import org.apache.poi.hssf.usermodel.HSSFDateUtil;
    import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
    import org.apache.poi.openxml4j.opc.OPCPackage;
     
    //import org.apache.poi.xssf.usermodel.xssfd
    import org.apache.poi.xssf.usermodel.XSSFCell;
    import org.apache.poi.xssf.usermodel.XSSFDataFormat;
    import org.apache.poi.xssf.usermodel.XSSFRow;
    import org.apache.poi.xssf.usermodel.XSSFSheet;
    import org.apache.poi.xssf.usermodel.XSSFWorkbook;
     
    public class ExtractData {
     
        public static void main( String [] args ) {
        	 int i=0;
        	 String valeur;
        	 SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yy");
            try {
                InputStream input = ExtractData.class.getResourceAsStream( "qa.xlsx" );
     
                OPCPackage opc=OPCPackage.open(input);
                XSSFWorkbook wb = new XSSFWorkbook(opc);
                XSSFSheet sheet = wb.getSheetAt(0);
     
                Iterator rows = sheet.rowIterator(); 
     
                while(rows.hasNext()) {           
                	XSSFRow  row = (XSSFRow ) rows.next();                
                   Iterator cells = row.cellIterator(); 
     
                    while(cells.hasNext()){    
     
                    	XSSFCell cell = (XSSFCell) cells.next(); 
     
     
                    	switch ( cell.getCellType() ) {
     
                            case XSSFCell.CELL_TYPE_NUMERIC:
                            	if(HSSFDateUtil.isCellDateFormatted(cell)){
                            		System.out.print ( sdf.format(cell.getDateCellValue()) );
                            	}else{
                            		System.out.print ( cell.getNumericCellValue() );
                            	}                           
                                break;
                            case XSSFCell.CELL_TYPE_STRING:
                            	valeur = (cell.getRichStringCellValue().getString()).replaceAll("  ", "");
                            	if(valeur.charAt(valeur.length()-1)==32)
                                {valeur = valeur.substring(0,valeur.length()-1);
                                }
                            	System.out.print (" STRING "+ valeur );                            
                                break;
                            default:
                                System.out.print( "unsuported sell type" );
                                break;
                        }
     
     
                    }System.out.println(" ");
                }
     
            } catch ( IOException ex ) {
                ex.printStackTrace();
            }catch (InvalidFormatException ex ) {
                ex.printStackTrace();
            }
        }
     
    }
    Merci!

  2. #2
    Membre éclairé Avatar de Ceddoc
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2009
    Messages
    493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2009
    Messages : 493
    Points : 698
    Points
    698
    Par défaut
    les noms de tes champs de la table en bdd sont les mêmes que le nom des colonnes sous excel?

  3. #3
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2007
    Messages
    310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 310
    Points : 133
    Points
    133
    Par défaut
    Citation Envoyé par Ceddoc Voir le message
    les noms de tes champs de la table en bdd sont les mêmes que le nom des colonnes sous excel?
    malheureusement non!

  4. #4
    Membre chevronné

    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    974
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 974
    Points : 1 825
    Points
    1 825
    Par défaut
    je suppose que comme tout tableur qui se respecte, test données excel sont ordonnées. Sur chaque ligne, combien as-tu d'entier et de String ? Est-ce que tu veux les stocker dans la base sous forme de deux champs de type entier et varchar()?

    Si c'est lae cas, tu peux stocker les données dans une HashMap<int,String> (ou une LinkedHashMap, si tu veux garder l'ordre) et ensuite sauver la liste dans la table avec deux champs: entier et varchar();

    Mais bon, il faudrait que tu nous en dises plus sur l'organisation de ton fichier xls et sur le schéma de ta base de données.

  5. #5
    Membre éclairé Avatar de Ceddoc
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2009
    Messages
    493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2009
    Messages : 493
    Points : 698
    Points
    698
    Par défaut
    A un moment ou a un autre il faudra que tu fasse la correspondance entre la colonne du tableur et la colonne de la base j'ai l'impression.

    Comme le dis plawyx il nous faut plus d'informations sur ta (tes) tables et tes fichiers excel.

  6. #6
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2007
    Messages
    310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 310
    Points : 133
    Points
    133
    Par défaut
    Citation Envoyé par Ceddoc Voir le message
    A un moment ou a un autre il faudra que tu fasse la correspondance entre la colonne du tableur et la colonne de la base j'ai l'impression.

    Comme le dis plawyx il nous faut plus d'informations sur ta (tes) tables et tes fichiers excel.
    Structre de ma table effet(num_eft, lib_eft,date_eft)
    num_eft est de type entier,
    lib_eft est de type varchar,
    date_eft est de type date

    Structure de mon classeur excel
    N° effet de type numérique est la première colonne
    Libelle effet de type texte est la deuxième colonne
    Date effet de type date est la troisième colonne


    je pense que la solution de plawyx m'aidera mais je n'ai pas encore utiliser les hashmap

    merci!

  7. #7
    Membre éclairé Avatar de Ceddoc
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2009
    Messages
    493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2009
    Messages : 493
    Points : 698
    Points
    698
    Par défaut
    Je voix pas trop ton problème, essaie quelque chose comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
     
     
    package pOIExample;
     
    import java.io.IOException;
    import java.io.InputStream;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.Iterator;
     
    import org.apache.poi.hssf.usermodel.HSSFDateUtil;
    import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
    import org.apache.poi.openxml4j.opc.OPCPackage;
     
    //import org.apache.poi.xssf.usermodel.xssfd
    import org.apache.poi.xssf.usermodel.XSSFCell;
    import org.apache.poi.xssf.usermodel.XSSFDataFormat;
    import org.apache.poi.xssf.usermodel.XSSFRow;
    import org.apache.poi.xssf.usermodel.XSSFSheet;
    import org.apache.poi.xssf.usermodel.XSSFWorkbook;
     
    public class ExtractData {
     
        public static void main( String [] args ) {
        	 int i=0;
        	 String valeur;
        	 SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yy");
            try {
                InputStream input = ExtractData.class.getResourceAsStream( "qa.xlsx" );
     
                OPCPackage opc=OPCPackage.open(input);
                XSSFWorkbook wb = new XSSFWorkbook(opc);
                XSSFSheet sheet = wb.getSheetAt(0);
     
                Iterator rows = sheet.rowIterator(); 
     
                while(rows.hasNext()) {  
                    MonObjetLigneTab obj = new MonObjetLigneTab();
                	XSSFRow  row = (XSSFRow ) rows.next();                
                   Iterator cells = row.cellIterator(); 
     
                    while(cells.hasNext()){    
     
                    	XSSFCell cell = (XSSFCell) cells.next(); 
     
     
                    	switch ( cell.getCellType() ) {
     
                            case XSSFCell.CELL_TYPE_NUMERIC:
                            	if(HSSFDateUtil.isCellDateFormatted(cell)){
                            		System.out.print ( sdf.format(cell.getDateCellValue()) );
                                        //ICI tu teste la colonne et si 1 tu met dans obj.setnum_eft si 2 dans lib_eft etc...
                            	}else{
    //ICI tu teste la colonne et si 1 tu met dans obj.setnum_eft si 2 dans lib_eft etc...
                            		System.out.print ( cell.getNumericCellValue() );
                            	}                           
                                break;
                            case XSSFCell.CELL_TYPE_STRING:
                            	valeur = (cell.getRichStringCellValue().getString()).replaceAll("  ", "");
                            	if(valeur.charAt(valeur.length()-1)==32)
                                {valeur = valeur.substring(0,valeur.length()-1);
                                }
    //ICI tu teste la colonne et si 1 tu met dans obj.setnum_eft si 2 dans lib_eft etc...
                            	System.out.print (" STRING "+ valeur );                            
                                break;
                            default:
                                System.out.print( "unsuported sell type" );
                                break;
                        }
     
     
                    }System.out.println(" ");
                  //ici tu insère l'objet obj dans ta table
                }
     
            } catch ( IOException ex ) {
                ex.printStackTrace();
            }catch (InvalidFormatException ex ) {
                ex.printStackTrace();
            }
        }
     
    }

Discussions similaires

  1. [MySQL-5.1] Dissocier le fichier données du fichier data dans une table MySQL
    Par bronon dans le forum Administration
    Réponses: 0
    Dernier message: 02/03/2014, 11h56
  2. Réponses: 3
    Dernier message: 20/04/2010, 09h31
  3. Importer les données d'un fichier excel dans une table
    Par dams95190 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 07/12/2007, 10h35
  4. importer les noms de fichiers html dans une table access
    Par abane badis dans le forum Access
    Réponses: 3
    Dernier message: 14/11/2005, 17h25
  5. Réponses: 7
    Dernier message: 04/10/2005, 18h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo