Aller au contenu
  • Pas encore inscrit ?

    Pourquoi ne pas vous inscrire ? C'est simple, rapide et gratuit.
    Pour en savoir plus, lisez Les avantages de l'inscription... et la Charte de Zébulon.
    De plus, les messages que vous postez en tant qu'invité restent invisibles tant qu'un modérateur ne les a pas validés. Inscrivez-vous, ce sera un gain de temps pour tout le monde, vous, les helpeurs et les modérateurs ! :wink:

Importation de données xls vers mysql


Philiblues

Messages recommandés

Bonjour,

 

Je reçois un fichier .xls que je dois traiter en PHP pour insérer les données dans une base mysql... Je ne sais pas comment traiter le problème.

 

Voici la forme du fichier xls (ce fichier Excel est issus de 4D, toutes les infos sont dans la première colonne du tableur, j'ai pour information environ 32 000 ligne dans ce tableau) :

 

<GROUPE>

<SOCIETE>

<COORDONNEES>

<IDENTIFIANT>******</IDENTIFIANT>

<LIBELLE>*** Texte ***</LIBELLE>

<ADRESSE1>*** Texte ***</ADRESSE1>

<ADRESSE2></ADRESSE2>

<BP></BP>

<CP>*** Texte ***</CP>

<VILLE>*** Texte ***</VILLE>

<ID_PAYS>21</ID_PAYS>

<TEL>*** Texte ***</TEL>

<FAX>*** Texte ***</FAX>

<SITEWEB>www.*** Texte ***.com</SITEWEB>

<EMAIL></EMAIL>

</COORDONNEES>

<ACTIVITE>

<ID_ACTIVITE>300034</ID_ACTIVITE>

<ID_ACTIVITE>300116</ID_ACTIVITE>

</ACTIVITE>

<LISTE_DIRIGEANT>

</LISTE_DIRIGEANT>

</SOCIETE>

</GROUPE>

 

Quelqu'un aurait-il une idée de la procédure à suivre ?

Doit-on enregistrer le xls sous un autre format ? Quelles fonctions php dois-je utiliser pour récupérer les données de chaque fiche ?

 

Merci :P

Modifié par Philiblues
Lien vers le commentaire
Partager sur d’autres sites

1. transformer le xls en txt ou csv

2. utiliser fopen() pour obtenir un handle sur le fichier

3. utiliser fgets() ou fgetcsv() pour récupérer les différentes lignes/champs dans un tableau indexé

4. établir une connexion avec mysql

5. insérer les données contenues dans le tableau dans la BDD

 

//cool simplexml_load_file() !! je connaissais pas. Le fichier en question ayant une structure XML, ce sera beaucoup plus simple en effet.

Lien vers le commentaire
Partager sur d’autres sites

Invité philiblues

Bonsoir,

 

Simplexml_load_file() fonctionne parfaitement avec un petit échantillon de ma base 4D mais si je rentre les 32 000 enregistrements j'obtiens pas mal de messages d'erreur de ce type :

 

Warning: simplexml_load_file() [function.simplexml-load-file]: file.xml:605: parser error : xmlParseEntityRef: no name in /home/www/***/simplexml.php on line 13

 

Warning: simplexml_load_file() [function.simplexml-load-file]: <LIBELLE>AGOU & CIE</LIBELLE> in /home/www/***/simplexml.php on line 13

 

Warning: simplexml_load_file() [function.simplexml-load-file]: ^ in /home/www/***/simplexml.php on line 13

 

Warning: simplexml_load_file() [function.simplexml-load-file]: file.xml:2534: parser error : PCDATA invalid Char value 3 in /home/www/***/simplexml.php on line 13

 

 

Voici le code de ma page de test simplexml.php :

 

<?php
$filename = 'file.xml';

$xml = simplexml_load_file($filename);
$p_cnt = count($xml->SOCIETE);
for($i = 0; $i < $p_cnt; $i++) {
 $libelle = $xml->SOCIETE[$i]->COORDONNEES->LIBELLE;
 echo $libelle . '<br />';
}
?>

Lien vers le commentaire
Partager sur d’autres sites

le caractère & (esperluette) gêne le parsing xml du fichier manifestement.

 

remplace ce méta-caractère par &

 

for i in `ls *xml`;
do sed -e 's/&/&/g' <$i > tmp
mv tmp $i
done

Lien vers le commentaire
Partager sur d’autres sites

Invité philiblues

Bonsoir,

 

Merci pour vos réponses, je ne comprends pas ce dernier code pour changer les caractères spéciaux, est-ce du php? je mets ça où dans la boucle? :P désolée je suis un peu blonde sur les bras...

Lien vers le commentaire
Partager sur d’autres sites

non c'est du bash (shell script unix). A exécuter sur la machine qui héberge tes fichiers xml (qui doivent se trouver dans /home/www/***/) pour peu que tu aies accès à un shell.

Lien vers le commentaire
Partager sur d’autres sites

Salut!

Pour corriger le soucis des &:

 

<?php
$filename = 'file.xml';

$file_xml = file_get_contents($filename);
$file_xml = preg_replace("/&/","&",$file_xml);

$xml = new SimpleXMLElement($file_xml);

$p_cnt = count($xml->SOCIETE);
for($i = 0; $i < $p_cnt; $i++) {
 $libelle = $xml->SOCIETE[$i]->COORDONNEES->LIBELLE;
 echo $libelle . '<br />';
}
?>

Lien vers le commentaire
Partager sur d’autres sites

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.
Remarque : votre message nécessitera l’approbation d’un modérateur avant de pouvoir être visible.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

  • En ligne récemment   0 membre est en ligne

    • Aucun utilisateur enregistré regarde cette page.
×
×
  • Créer...