Importer des feuilles Excel dans MySQL

Fermé
Gaspard Monge - 3 nov. 2003 à 14:26
 katr vin - 16 févr. 2016 à 09:20
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
A voir également:

22 réponses

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>
31
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 ?
0
Merci pour votre aide manuramolo :)
0
Merci
0
Juste une petite coquille dans ton expression =)> ("DELETE FROM commmunes"); il y a un "m" en trop :)
0
merci
0
Utilisateur anonyme
15 juin 2004 à 15:29
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. :)
17
salut kalamit,

super simple mais comment tu importes un fichier csv dans phpmyadmin
0
Daniel > fred
23 juin 2004 à 16:10
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+
0
Romeof Messages postés 30 Date d'inscription jeudi 6 décembre 2007 Statut Membre Dernière intervention 26 avril 2010 1 > Daniel
7 janv. 2009 à 14:25
Merci Daniel, sa été de grande utilité pour moi.
je vous remercie infiniment.
0
C-Eric > Romeof Messages postés 30 Date d'inscription jeudi 6 décembre 2007 Statut Membre Dernière intervention 26 avril 2010
27 févr. 2009 à 14:09
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
0
Ben > Daniel
22 juil. 2009 à 12:16
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
0
Solution pour transférer des données Excel vers MySQL (....)
5
Installer sur le poste ou tourne EXCEL le driver MyODBC dispo gratuitement
ici : https://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.
2
Bonjour,
Et si je ne veux pas utiliser ce ODBC est ce qu'il d'autre solution?
En fait je vous demande tout simplement si c'est possible d'importer des fichier xlsx vers MySQL via php seulement!!!
Merci

Vin katr
0

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

Posez votre question
Gtld Messages postés 25 Date d'inscription lundi 8 septembre 2008 Statut Membre Dernière intervention 17 juin 2009 25
14 oct. 2008 à 10:21
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
2
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!
2
je confirme, talend open studio fait tout ca et c est assez performant, dans le meme style en libre aussi ya kettle
0
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.
1
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
0
Laurent ABRIAL
15 juin 2004 à 15:27
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
0
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
0
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
0
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.
0
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
0
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
0
cannarc Messages postés 1 Date d'inscription vendredi 14 décembre 2007 Statut Membre Dernière intervention 23 décembre 2007
23 déc. 2007 à 16:44
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
@+
0
anaji Messages postés 1 Date d'inscription dimanche 23 décembre 2007 Statut Membre Dernière intervention 23 décembre 2007
23 déc. 2007 à 23:16
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
0
je v une solution trés simple svp
0
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!
0
est ce que en peut travail dans Mysql5.5
0
Gtld Messages postés 25 Date d'inscription lundi 8 septembre 2008 Statut Membre Dernière intervention 17 juin 2009 25
23 déc. 2008 à 22:12
Vous pouvez regarder Talendforge pour poser vos questions et trouver des informations : http://www.talendforge.org/
0
bonjour a tous
merci pour ce bout de code ça marche, il fait l'importation mais il m'affiche un
Notice: Undefined index: userfile in C:\wamp\www\monsite\import_mails.php on line 47
0
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...
-1
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
0