Bonjour,
Je dois importer des feuilles excel dans une seul table sur mysql , j'ai utilisé quelques méthodes que j'ai trouvé sur internet mais sans succés.
c'est quelqu'un à déja eu ce genre de probléme qu'il me guide et merci à l'avance
Bonjour,
Je dois importer des feuilles excel dans une seul table sur mysql , j'ai utilisé quelques méthodes que j'ai trouvé sur internet mais sans succés.
c'est quelqu'un à déja eu ce genre de probléme qu'il me guide et merci à l'avance
Salut elans.
Il n'y a aucune difficulté à charger un fichier Excel dans une ou plusieurs tables MySql.
Vous devez vous poser les questions suivantes :
1) êtes-vous sous windows ou sous linux ?
C'est à cause de la gestion de la fin de ligne qui est différente entre ces deux OS.
2) quel est la structure de vos lignes sous Excel ?
Est-ce que vos champs sont séparés par des tabulations, des virgules, des points virgules ...
Comment gérez vous le NULL ?
3) le charset ?
4) que désirez-vous faire ensuite ?
Dispatcher vos champs dans plusieurs colonnes de plusieurs tables ?
Si vous désirez que je vous donne un exemple, donnez moi un exemple de ce que vous désirez charger depuis un fichier text de type Excel (.csv).
Et donnez moi aussi la structure de vos tables, toujours avec l'exemple de ce que vous désirez obtenir.
5) désirez-vous sauter quelques lignes dans votre fichier Excel ?
@+
bonjour Artemus24;
Merci pour la réponse alors :
- je travail sur windows
- c'est un fichier (csv) qui contient 15 feuilles , chaque feuille compte environ 30000 lignes et ils ont tous la même structure ça veut dire 4 colonnes dans chaque feuille avec les mêmes intitulés ensuite j'ai une table sur MYSQL cette table a la même structure que les feuilles 4 colonnes (ID_CLEINT,NOM,PRENOM,AGE) dans le fichier je veux pas sauter des lignes et aussi il y a pas de ligne vide dans les feuilles
Mon objectif et d'importer toutes les feuilles dans ma table MYSQl j'ai déja utiliser une requête SQl LOAD DATA INFILE.... mais il fait juste l'importation d'une seule feuille
A+
Salut elans.
Voici un exemple de chargement :
Et voici le fichier text de type ".csv" :
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 -------------- SET AUTOCOMMIT = 0 -------------- -------------- START TRANSACTION -------------- -------------- DROP DATABASE IF EXISTS `base` -------------- -------------- CREATE DATABASE IF NOT EXISTS `base` DEFAULT CHARACTER SET `latin1` DEFAULT COLLATE `latin1_general_ci` -------------- -------------- DROP TABLE IF EXISTS trav -------------- -------------- CREATE TABLE trav ( col_num integer null default null, col_date datetime null default null, col_char varchar(255) null default null ) ENGINE=InnoDB DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci` ROW_FORMAT=COMPRESSED -------------- -------------- LOAD DATA LOCAL INFILE 'fichier.txt' INTO TABLE `trav` CHARACTER SET latin1 FIELDS TERMINATED BY ';' OPTIONALLY ENCLOSED BY '\"' ESCAPED BY '\\' LINES TERMINATED BY '\r\n' IGNORE 0 LINES (@F1, @F2, @F3) set col_num = trim(@F1), col_date = str_to_date(trim(@F2), '%d/%c/%Y %H:%i:%s'), col_char = trim(@F3) -------------- -------------- select * from trav -------------- +---------+---------------------+--------------------+ | col_num | col_date | col_char | +---------+---------------------+--------------------+ | NULL | 2014-05-10 15:33:17 | web | | 125 | 2014-05-15 23:53:59 | alpha; beta; gamma | | -247 | NULL | zéro | +---------+---------------------+--------------------+ -------------- COMMIT -------------- -------------- SET AUTOCOMMIT = 0 -------------- Appuyez sur une touche pour continuer...
Ce script mysql charge un fichier text de type ".csv".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 \N;"10/5/2014 15:33:17";"web" 125;"15/5/2014 23:53:59";"alpha\; beta\; gamma" -247;\N;"zéro"
Il est donc nécessaire de transformer votre fichier Excel au format csv.
Si par contre, vous désirez extraire directement le contenu du fichier Excel, il vous faut un utilitaire comme "odbc connector".
C'est-à-dire que vous accédez à MySql depuis Excel.
La solution que je vous propose ci-dessus est l'inverse, c'est-à-dire accéder à partir d'un fichier ".csv" mais depuis MySql.
@+
Salut Artemus24,
Merci pour la réponse je vais tester votre code par contre j'ai des questions :
- Pour le code SQl je dois l’exécuter dans MYSQL plus précisément dans la fenêtre SQL de ma Base
- Est c qu'il faut faire des modification sur le connecteur ODBC avant d'exécuter le script ?
- ce tableau est obligatoire+---------+---------------------+--------------------+ | col_num | col_date | col_char | +---------+---------------------+--------------------+ | NULL | 2014-05-10 15:33:17 | web | | 125 | 2014-05-15 23:53:59 | alpha; beta; gamma | | -247 | NULL | zéro | +---------+---------------------+--------------------+
- le 2eme code j l'ai pas trop compriset aussi cette partie dans le premier code
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 (@F1, @F2, @F3) set col_num = trim(@F1), col_date = str_to_date(trim(@F2), '%d/%c/%Y %H:%i:%s'), col_char = trim(@F3)
A+
Salut elans.
En ce qui concerne mon exemple, je l'exécute avec un script SQL que je lance depuis un script batch windows.Envoyé par Elans
Voici le source du script batch windows :
Et voici le source du script mysql :
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 @echo off setlocal enableDelayedExpansion chcp 1252 > nul set PATH=.;%WAMPSERVER%\bin\mysql\%MYSQL%\bin\;%PATH% SET FIC=%~nx0 SET FIC=%FIC:bat=sql% @echo. mysql < %FIC% --verbose --force @echo. pause exit
Vu que ce script est à la demande, rien ne vous empêche de faire comme moi, c'est-à-dire un script que vous lancez quand bon vous semble.
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 SET AUTOCOMMIT = 0; START TRANSACTION; -- ====================== -- Base de Données `Base` -- ====================== DROP DATABASE IF EXISTS `base`; CREATE DATABASE IF NOT EXISTS `base` DEFAULT CHARACTER SET `latin1` DEFAULT COLLATE `latin1_general_ci`; USE `base`; -- ============ -- Table `trav` -- ============ DROP TABLE IF EXISTS trav; CREATE TABLE trav ( col_num integer null default null, col_date datetime null default null, col_char varchar(255) null default null ) ENGINE=InnoDB DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci` ROW_FORMAT=COMPRESSED; -- ============================= -- Chargement de la table `trav` -- ============================= LOAD DATA LOCAL INFILE 'fichier.txt' INTO TABLE `trav` CHARACTER SET latin1 FIELDS TERMINATED BY ';' OPTIONALLY ENCLOSED BY '\"' ESCAPED BY '\\' LINES TERMINATED BY '\r\n' IGNORE 0 LINES (@F1, @F2, @F3) set col_num = trim(@F1), col_date = str_to_date(trim(@F2), '%d/%c/%Y %H:%i:%s'), col_char = trim(@F3); -- ========================= -- Vidage de la table `trav` -- ========================= select * from trav; -- === -- Fin -- === COMMIT; SET AUTOCOMMIT = 0;
Sinon, vous pouvez le lancer depuis phpmyadmin.
Je ne comprends pas bien votre question. L'exemple que je vous ai donné se lance sous MySql.Envoyé par Elans
Il n'est pas nécessaire d'avoir "connector odbc" qui est une autre application destiné à travailler depuis Excel.
Ce n'est pas un tableau mais un exemple de chargement du fichier excel vers une table mysql.Envoyé par Elans
Qu'est-ce que vous appelez "2eme code" ?Envoyé par Elans
Si c'est le fichier Excel, c'est juste un exemple de chargement d'une colonne numérique, alphabétique et la valeur NULL.
La partie suivante concerne l'association que vous allez faire entre les colonnes du fichier Excel et celle de votre table MySql.
Je définis trois colonnes que je baptise "@F1, @F2, @F3".
Code : Sélectionner tout - Visualiser dans une fenêtre à part (@F1, @F2, @F3)
Elles correspondent à la première, deuxième et troisième colonne de votre fichier Excel.
Ensuite, je dois effectuer une mise en forme sur ces trois colonnes :
Il s'agit ici de supprimer les espaces avant et après la première colonne, c'est-à-dire la colonne numérique.
Code : Sélectionner tout - Visualiser dans une fenêtre à part set col_num = trim(@F1),
Il s'agit de mettre en forme la date qui a un format qui ne correspond pas à ce que je dois charger dans la colonne "date".
Et enfin, sur la troisième colonne, je supprime aussi les espaces avant et après la chaine de caractères.
Code : Sélectionner tout - Visualiser dans une fenêtre à part col_date = str_to_date(trim(@F2), '%d/%c/%Y %H:%i:%s'),
Refaites le test chez vous en prenant les deux scripts windows et mysql, ainsi que le fichier Excel.
Code : Sélectionner tout - Visualiser dans une fenêtre à part col_char = trim(@F3)
N'oubliez pas de modifier le chemin vers votre serveur dans la variable PATH.
@+
Salut,
Je vais le voir ce week-end à tête reposer et je vous tiens au courant et merci pour votre aide
A+
Partager