Rechercher : dans
Par :

Importer des feuilles Excel dans MySQL

Dernière réponse le 22 jui 2009 à 12:16:00 Gaspard Monge, le 3 nov 2003 à 14:26:39 
 Signaler ce message aux modérateurs

Bonjour,
Actuellement, je développe une application PHP/MySQL pour un système de maintenance en remplacment d'un système de fichiers
Excel. Pour garder l'historique je doit récupérer toutes les données des feuilles Excel( il y en a 3900).

Voici les données :
1- Chaque fichier Excel doit correspondre à un enregistrement dans la nouvelle base.
2- Dans les fichiers Excel, les données se trouvent dans les mêmes cellule d'un fichier à l'autre.(A quelques
exceptions)
3- Les feuilles Excel comportent 20 Colonnes sur 60 Lignes.
4- Les fichiers Excel comportent deux onglets
5- J'utilise Excel 97 et PHP 4.2.0 / MySQL 3.23.49, le tout sous Windows NT 4.0 SP6a

Hormis la transformation de .XLS vers un .SLK ou .CSV ou .TXT (ce qui dans mon cas, me demande beaucoup de temps)
existe-t-il une autre façon qui me permettrait de récupérer les données ?
Actuellement je sèche complètement..
Merci d'avance

1

mehdi, le 14 mai 2004 à 16:57:51

Salut:
il ya une méthode mais elle est un peu compliqué alors:
tu entre sur access , tu importe ton fichier excel, puis tu fabrique une requette (toujours avrc access), puis tu va pour télecharger Sqlporter
sur la page
http://www.realsoftstudio.com/sqlportermysqled.php
puis , et avec sqlporter tu importe ton fichier access crée
dans les base de donnée de easyphp
tu va voir ta table exel s'afficher
si tu n'as pas compris , tu peut me comtacter sur mon email
j'éspére que tu peut faire ses étape
aurevoir

Répondre à mehdi

2

Laurent ABRIAL, le 15 jun 2004 à 15:27:40

Bonjour,
Tu peux transférer des données Excel ou Access vers unez base MySQL avec XLSMagique (http://www.odbcphp.fr.st/) : gratuit ou avec ou avec l'outil : MySQL Migration Toolkit d'Intelligent Converters qui est payant

Répondre à Laurent ABRIAL

3

kalamit, le 15 jun 2004 à 15:29:18
  • +4

Moi j'ai encore plus simple.
Tu enregistres ton xls au format csv et tu l'importes dans phpmyadmin (si tu as phpmyadmin). 3 minutes chrono, montre en main. :)

Kalamit,
10 jours avant le soleil, la mer et les mouettes. :)

Répondre à kalamit

4

fred, le 17 jun 2004 à 15:43:10

Salut kalamit,

super simple mais comment tu importes un fichier csv dans phpmyadmin

Répondre à fred

5

Daniel, le 23 jun 2004 à 16:10:26
  • +5

Super simple :)
1 tu cliques sur ta table
2 vers le centre de la page ouverte tu cliques sur le lien "Insert data from a textfile into table"
3 dans le champ à gauche de "Fields terminated by" tu remplace le ; par une ,
4 cliquez submit
5 prendre un bon café

a+

Répondre à Daniel

28

Romeof, le 7 jan 2009 à 14:25:01

Merci Daniel, sa été de grande utilité pour moi.
je vous remercie infiniment.

Répondre à Romeof

30

C-Eric, le 27 fév 2009 à 14:09:41

Bonjour Romeof,
Je me trouve dans la même situation de voir actualiser ma base MySQL à partir d'un fichier Excel mais comment obtenir "Insert data from a textfile into table" ?

Merci d'avance

Eric

Répondre à C-Eric

32

 Ben, le 22 jui 2009 à 12:16:00

Bonjour Daniel,

J'ai le même problème et ta solution fonctionne. Simplement, j'ai un champ qui s'auto incrémente dans ma base (un indice, clé primaire) et phpmyadmin refuse de m'importer mon doc excel si je ne remplis pas aussi ce champ que j'aimerai laisser blanc pour qu'il s'auto incrémente. Y a-t-il une solution?

Merci d'avance pour ton aide.

Benjamin

Répondre à Ben

6

fred, le 24 jun 2004 à 09:53:35

Merci Daniel c'est bien ce que j'ai fait mais par un mystère que je ne m'explique pas, l'import se fait dans le premier champ et tous les autres (il y en a 6 en tout) affichent NULL.
As tu une explication?

Merci

Fred

Répondre à fred

7

Lionel, le 11 jui 2004 à 19:57:43

Bonjour,
si vous avez encore besoin, voici comment j'ai fait :
C'est essentiel = Votre base doit être complètement mise en forme
"Champ1","Champ2","Champ3", etc, ... et finir par "

Utilisez les fonctions 'concatener' d'excel ou 'rechercher'remplacer' de Word ou excel pour faire ça.

Conservez la première ligne avec les noms de champs identiques à votre base MySQL. Enregistrer en format .TXT

Puis dans MySql, choisissez d'importer un fichier texte
Mettre le nom du fichier créé avant
Cochez "remplacer"
Champs terminés par , (la virgule)
Et enfin cliquez sur "exécuter"

A ma grande surprise (j'ai utilisé MySql pour la 1ère fois aujourd'hui), j'ai récupéré plus de 4000 lignes en quelques sacondes

Répondre à Lionel

8

Anatole, le 9 déc 2006 à 15:08:55
  • +1

Salut,

Je rencontre une difficuté: je ne sais pas quoi mettre dans la case "ligne terminée par" demandée par PHPmyAdmin.

Par défaut il y a "auto" mais ça ne marche pas.

Quel caractère termine une ligne dans un fichier CSV exporté de Excel ?

Merci, Anatole.

Répondre à Anatole

9

mmerlange, le 27 mar 2007 à 12:35:23

Bonjour,
j'ai une très grosse base sous Excel (j'ai la mm ss Access) et pour faire l'import en cvs, j'ai du m'y reprndre par paquets (max 2 Mo par paquet...): j'y ai passé des heures.
Je viens de peter ma base et vais devoir recommencer. Je déprime et suis pas pret à mm galère...
Sans connaitre, j'ai vu que certaines bases utilisaient des fichiers .dump. Comment font les pros pour faire leurs sauvegardes et les reimporter?
Merci, j'ai pas envie de repasser une nuit à faire des copier/coller...

Répondre à mmerlange

10

Valérie, le 4 jui 2007 à 17:13:53

Pour transférer une base excel sur access il suffit de créer une nouvelle table access en passant par fichier, données externes et ensuite suivre la procédure de création de table proposée par access.

VD

Répondre à Valérie

11

chkoba, le 7 déc 2007 à 01:36:39

Bsr
svp jai un fichier exel qui porte l'emploi de temps des tous les filiere et tous les classe ainsi les sale et les enseignant desirer
j'aimerai que ce ficher soit un table dans ma base de donner avec les meme champs "classe""groupes""sale" jour""enseignant"
je l'ai transformer a un fichier acces "extension csv"mais a l'importation elle me sort une erreure dans la ligne 112et voici l'ereur"
Warning: mb_strpos(): Unknown encoding or conversion error. in c:\program files\easyphp1-8\phpmyadmin\libraries\string.lib.php on line 112"
merci d'avance

Répondre à chkoba

12

manuramolo, le 12 déc 2007 à 23:40:56
  • +1

Voici ma proposition en php
formulaire
<form method="post" enctype="multipart/form-data" action="import_requete_communes.php">
<table width="628" border="0" align="center" cellpadding="5" cellspacing="0" bgcolor="#eeeeee">
<tr>
<td width="500"><font size=3><b>Selectionner votre fichier *.csv :</b></font></td>
<td width="244" align="center"><input type="file" name="userfile" value="userfile"></td>
<td width="137" align="center">
<input type="submit" value="Envoyer" name="envoyer">
</td>
</tr>
</table>
</form>

récupération en php

<?php
// vérification sur la session authentification (la session est elle enregistrée ?)
// ici les éventuelles actions en cas de réussite de la connexion
require_once('connect.php');
$sql=mysql_query("DELETE FROM commmunes");

//=========================
// Traitement des donnees
//=========================

//recupere le nom du fichier indiqué par l'user
$fichier=$_FILES["userfile"]["name"];

// ouverture du fichier en lecture
if ($fichier)
{
//ouverture du fichier temporaire
$fp = fopen ($_FILES["userfile"]["tmp_name"], "r");
}
else{
// fichier inconnu
?>
<p align="center" >- Importation échouée -</p>
<p align="center" ><B>Désolé, mais vous n'avez pas spécifié de chemin valide ...</B></p>
<?php
exit();
}
// declaration de la variable "cpt" qui permettra de conpter le nombre d'enregistrement réalisé
$cpt=0;
?>
<p align="center">- Importation Réussie -</p>

<p align="right"><a href="#bas">Bas de page</a></p>

<?php
// importation
while (!feof($fp))
{
$ligne = fgets($fp,4096);
// on crée un tableau des élements séparés par des points virgule
$liste = explode(";",$ligne);
// premier élément
$liste[0] = ( isset($liste[0]) ) ? $liste[0] : Null;
$liste[1] = ( isset($liste[1]) ) ? $liste[1] : Null;
$liste[2] = ( isset($liste[2]) ) ? $liste[2] : Null;



$champs1=$liste[0];
$champs2=$liste[1];
$champs3=$liste[2];

// pour eviter qu un champs "nom" du fichier soit vide
if ($champs1!='')
{
// nouvel ajout, compteur incrémenté
$cpt++;
// requete et insertion ligne par ligne
// champs1 id en general dc on affecte pas de valeur

mysql_query("INSERT INTO communes(dep, com, nomcom) VALUES('$champs1','$champs2','$champs3' )");

$dep="dep";
mysql_query("DELETE FROM communes WHERE (dep='$dep')");



?>
<table width="505" border="1" align="center" cellpadding="0" cellspacing="0" bgcolor="#eeeeee">
<tr>
<td width="124">Eléments importés :</td>
<td width="361"><?php echo $liste[0];?></td>
<td width="361"><?php echo $liste[1];?></td>

</tr>
</table>
<?php
}
}

// fermeture du fichier
fclose($fp);
//on supprime la derniere car elle est vide


//==================
// FIN
//==================
?>
<br><br>Nombre de valeurs nouvellement enregistrées: <b><?php echo $cpt;?></b>.<br><br>


<a name="bas"></a>
<p align="right"><a href="#haut">Haut de page</a></p><br>

Répondre à manuramolo

20

stefart, le 8 avr 2008 à 11:41:17

Salut manuramolo !
merci pour ton super code
J'ai donc ajouté ton code a mon site et il marche impeccable !

stp juste une ptite info si je ne souhaite pas intégré l'ensemble des colonne du fichier .csv
Comment faire ??

exemple :

dans mon .csv
j'ai des colonnes de A a L et je ne souhaite importé que les colonnes A, C, E, F et G


$liste[0] = ( isset($liste[0]) ) ? $liste[0] : Null;
$liste[3] = ( isset($liste[3]) ) ? $liste[3] : Null;
$liste[5] = ( isset($liste[5]) ) ? $liste[5] : Null;
$liste[6] = ( isset($liste[6]) ) ? $liste[6] : Null;
$liste[7] = ( isset($liste[7]) ) ? $liste[7] : Null;

$champs1=$liste[0];
$champs2=$liste[3];
$champs3=$liste[5];
$champs4=$liste[6];
$champs5=$liste[7];

et ensuite :
mysql_query("INSERT INTO communes (dep, com, nomcom, numdep, picto ) VALUES('$champs1','$champs2','$champs3','$champs4','$champs5' )");


c'est bien ça ?

Répondre à stefart

13

marzouk, le 13 déc 2007 à 17:10:55

Svp lorsque j'ai fait l'importation la table est rempli de n'importe quoi il me donne le message
Warning: mb_strpos(): Unknown encoding or conversion error. in c:\program files\easyphp1-8\phpmyadmin\libraries\string.lib.php on line 112

Répondre à marzouk

14

cannarc, le 23 déc 2007 à 16:44:34

Et alors, tu as eu des infos à prpos de cette erreur 112 ?
J'ai le même problème après avoir exporté ma base Access vers un fichier .txt(séparateur)
Puis, je veux l'importer pour créer ma base est résultat:

Warning: mb_strpos() [function.mb-strpos]: Unknown encoding or conversion error. in C:\Program Files\EasyPHP 2.0b1\phpmyadmin\libraries\string.lib.php on line 112

Warning: mb_strpos() [function.mb-strpos]: Unknown encoding or conversion error. in C:\Program Files\EasyPHP 2.0b1\phpmyadmin\libraries\string.lib.php on line 112

Warning: mb_strpos() [function.mb-strpos]: Unknown encoding or conversion error. in C:\Program Files\EasyPHP 2.0b1\phpmyadmin\libraries\string.lib.php on line 112

Fatal error: Cannot use string offset as an array in C:\Program Files\EasyPHP 2.0b1\phpmyadmin\libraries\sqlparser.lib.php on line 922



Merci de m'aider, je suis débutant en la matière ...
mon adresse: raphael_roger sur hotmail point com
@+

Répondre à cannarc

15

anaji, le 23 déc 2007 à 23:16:41

Je voulais importé un fichier .xls vers bd mysql seulement il ya un message d'erreur:
Erreur
requête SQL:

13°1 ABDALLAH HASSAN ADEN NR M03 /12 /914°0123°1 ABOUBAKER MOUSSA ADAWEH RED M11 /04 /923°533°1 AHMED HOUSSEIN ROBLEH NR M19 /08 /904°0643°1 ALI MAHFOUD ALI RED M12 /01 /913°1053°1 ALI MOHAMED ALI NR M22 /01 /904°0863°1 ARWIN GAWAD AHMED NR M28 /07 /914°0373°1 ASSED MOHAMED ABOUBAKER NR M05 /07 /914°0183°1 ASSIA ALI KAMIL NR F24 /07 /904°0293°1 BAHDON ELMI DJAMA NR M08 /06 /90 AS 103°1 BAHGA AHMED ISMAEL RED F05 /03 /893°8113°1 BOUHO MOHAMED AHMED NR F30 /12 /924°07123°1 FAIZA GADITO HOUMED RED F08 /09 /913°3133°1 FAIZA MOHAMED ISMAEL NR F17 /12 /914°12143°1 FATO MAHMOUD AHMED NR F01 /04 /904°10153°1 FATOUMA FOUAD MOHAMED NR F12 /06 /914°14163°1 FEROUZ FOSI ABDALLAH etc.................

et à la fin:
MySQL a répondu:

#1064 - Erreur de syntaxe près de '1 3°1 ABDALLAH HASSAN ADEN NR M 03/12/91 4° 01
2 3°1 ABOUB' à la ligne 1

je travail sur easyphp avec os winows xp pro,pourtant j'ai tous fait pour faire concorder les schamps mysql de ma table et ceux du fichier xls.
aider moi svp c'est travail que je dois rendre a mon chef au plutöt.
merci d'avance kik c soit

Répondre à anaji

16

doudoun12, le 11 fév 2008 à 17:26:01

Bonjour à tous, j'ai travaillé ces deux derniers mois sur Access en développement une BDD pour des commerciaux. Tout s'est parfaitement passé jusqu'à présent mais je commence à rencontrer des problèmes: les commerciaux qui travaillent sur cette application sont répartis sur Plus de 1200km². Le fichier partagé sur lequel j'ai installé la BDD principale devient de plus en plus lourde et les utilisateurs commence à resentir une lenteur pour y accéder. On m'a parlé de mysql qui correspondrait mieux à mes besoins mais je n'y connais rien. Votre avis serait le bienvenu.

Répondre à doudoun12

17

Gihef, le 11 fév 2008 à 17:46:05

Bonjour,

Plutôt que de venir enterrer ta question dans les tréfonds de cette discussion sur Excel, crée plutôt ton propre post bien à toi.


 --

Répondre à Gihef

19

yoyo4972, le 3 mar 2008 à 12:29:53

Salut, jai aussi crée une application pour une grosse multinationale sous access et j'avais aussi le problème de stockage d'information, perso, jai utilisé une ligne de commande ms-dos et 2 requetes afin de sauvegarder et vider la base de données lorqu'elle est pleine. Sache que mysql est une base de donnée dans WAMP, elle permet aussi de stocker des données mais tuna pa tinterface comme sous access, il te faut la créer par une interface web par exemple. bvla, courage

Répondre à yoyo4972

18

aknazay, le 3 mar 2008 à 11:16:54

Je v une solution trés simple svp

Répondre à aknazay

21

Worldpeace, le 3 mai 2008 à 23:17:39
  • +3

Solution pour transférer des données Excel vers MySQL (....)

Répondre à Worldpeace

22

Worldpeace, le 3 mai 2008 à 23:33:45

Installer sur le poste ou tourne EXCEL le driver MyODBC dispo gratuitement
ici : http://dev.mysql.com/downloads/connector/odbc/5.1.html

Paramêtrer le driver : Start => Controle Panel => Administrative Tool => Datasource ODBC => Source Données Utilisateur => Ajouter => MySQL ODBC 5.1
Paramètrer : un bon tuto ici :
http://www.asp-php.net/tutorial/asp-php/iis_et_mysql.php?page=3

Dans le classeur mettre une proc VBA de ce genre

'******************************************************
'Dans cet exemple Il doit y avoir une Base MaBase avec une Table MaTable et 2 champs
'Dans cet exemple il doit y avoir une feuille Excel (Sheet1) avec 2 colonnes de données

Option Explicit
' http://www.tanguay.info/web/codeExample.php?id=847
Dim objDB, arrRecord, strRecord, strOutput
Dim oRS, nRec, oFld
Dim row
Dim SqlRequest

Dim C1
Dim Temp0
Dim Temp1



Private Sub btnTestReadInMysqlData_Click()

Dim objDB, arrRecord, strRecord, strOutput
Dim oRS, nRec, oFld
Dim row
Sheet2.Cells(1, 4).Value = Now
'Database connection & select all from Table
Set objDB = DBConnect()

For C1 = 2 To 1002
Temp0 = Replace(Sheet1.Cells(C1, 1).Text, ",", ".")
Temp1 = Replace(Sheet1.Cells(C1, 2).Text, ",", ".")

SqlRequest = "INSERT INTO `MaBase`.`MaTable` (`MonChamps1` ,`MonChamps2`)VALUES ('" & Temp0 & "' , '" & Temp1 & "');"
Set oRS = objDB.Execute(SqlRequest)

Sheet2.Cells(2, 4).Value = Now
Sheet2.Cells(3, 4).Value = C1
Next C1
End Sub


Function DBConnect()
Set objDB = CreateObject("ADODB.Connection")
objDB.Open "MYSQL_BlueBears"
Set DBConnect = objDB
End Function

'******************************************************
avec une liaison ADSL et un hebergement mutualisé 1000 requêtes = 3 minutes... et à peine plus si la requête est plus longue => c'est donc la connexion à la base qui prend du temps.

Répondre à Worldpeace

23

Worldpeace, le 3 mai 2008 à 23:47:46

Pour l'import de données en masse c'est "LOAD DATA LOCAL INFILE " la solution la plus rapide, la plus puissante, la plus élégante....
... Mais la plus part des hebergeurs désactivent la fonction.

PHPMyADMIN, quand il est proposé par l'hebergeur , est une manière détournée d'accéder à cette fonction.
Une insertion de fichier .CSV sur 3 champs et 65000 enregistrements en moins de 30 secondes.
Selection de la table => Importer => CSV via LOAD DATA + option : LOCAL

Contraintes : le nombre (et le type de données) de colonnes du CSV doit correspondre à celui des champs renseignés dans "nom des colonnes" . Les noms de colonnes doivent correspondre aux noms des champs dans la base.

En revanche pas de requete complexes possible (update, insert/update, etc...), c'est du chargement en masse point barre.

Répondre à Worldpeace

24

Trscut, le 10 oct 2008 à 11:42:32

Bonjour à tous,

J'ai besoin de faire du tranfert de data (nom de client, addresse etc) d'excel et access vers MySQL. Je n'ai pas vraiment de background technique et souhaiterais que l'opération soit aussi simple que possible.

Des idées? Merci!

Répondre à Trscut

25

Gtld, le 14 oct 2008 à 10:21:06

Bonjour Trscut,

Vous pourriez peut-être utiliser des outils ETL disponible sur le net. Ils font ce que vous recherchez (et d'avantage). Par contre, êtes-vous prêt à investir dans des programmes couteux? Si ça n'est pas le cas et comme ça a plutot l'air d'être un projet en "one shot", je recommanderais d'utiliser des outils ETL open source, téléchargeable gratuitement.

Vous pouvez regarder Talend Open Studio, c'est assez facile d'utilisation. Voici le lien de téléchargement: http://www.talend.com/solutions-data-integration/data-migration.php

Répondre à Gtld

26

Trscut, le 22 oct 2008 à 15:16:24

J'ai regarde quelques outils ETL et cela semble etre ce dont j'ai besoin. J'essayerais Talend et donnerais un avis. Merci pour votre aide!

Répondre à Trscut

29

fig, le 3 fév 2009 à 16:46:35

Je confirme, talend open studio fait tout ca et c est assez performant, dans le meme style en libre aussi ya kettle

Répondre à fig
Collection CommentÇaMarche.net