Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > Bureautique
Bureautique Forum d'entraide sur la gestion dynamique de documents de bureautique (Word, Excel, OpenOffice...) avec PHP. Avant de poster -> Cours Excel, FAQ OpenXML, FAQ OpenDocument
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 03/05/2006, 17h20   #1
Membre habitué
 
Inscription : mai 2004
Messages : 200
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 200
Points : 101
Points : 101
Par défaut [Librairies] PHP et Excel

Bonjour à tous, voila j'ai une bdd à remplir, pour une application de gestion de prospects que je viens de terminer.

J'ai plus de 450 prospects à rentrés, et j'ai pas très envie de me les taper à la main un par un. Pour ceci j'ai pensé à utiliser la puissance d'un tableaur excel, ou je rentrerai tous mes prospect dans excel, ce qui servira aussi pour la secretaire, et à partir de ce fichier, j'aimerai l'insérer dans ma bdd mysql à l'aide d'un script php. L eproblème, c'est que je n'ai pas d'idée comment faire, j'ai regardé sur le web, mais j'ai trouvé que dans le sensphp qui génère un fichier excel.

J'aimerai savoir si quelqu'un sais ou je peux m'inspirer d'une source existente de la meme envergure de ce que je veux faire.

Merci pour vos réponses, car je ne trouve pas ou chercher
gregal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2006, 17h27   #2
Membre expérimenté
 
Développeur Web
Inscription : avril 2006
Messages : 430
Détails du profil
Informations personnelles :
Localisation : Belgique

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : avril 2006
Messages : 430
Points : 538
Points : 538
Salut,

tu pourrais exporter ton fichier excel en CSV, et ensuite faire un script d'import des données CSV avec les fonctions de traitement de PHP (fgetcsv, par exemple)
bkill est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2006, 17h27   #3
Rédacteur
 
Avatar de Swoög
 
Inscription : janvier 2003
Messages : 6 053
Détails du profil
Informations personnelles :
Âge : 24

Informations forums :
Inscription : janvier 2003
Messages : 6 053
Points : 7 144
Points : 7 144
Envoyer un message via MSN à Swoög Envoyer un message via Skype™ à Swoög
Salut !

si ton fichier Excel est relativement simple, tu peux toujours l'exporter un CSV
__________________
Rédacteur "éclectique" (XML, IRC, Web...)
Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
pensez à la balise [code] (bouton #) et au tag (en bas)
Swoög est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2006, 17h39   #4
Membre habitué
 
Inscription : mai 2004
Messages : 200
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 200
Points : 101
Points : 101
ouai je peux tout a fais crée le fichier excel, l'exporter enn csv, et l'importer dans le php myadmin, sinon je vais peut etre faire un script qui me permet de le faire automatiquement, comme sa la personne chargé de la prospectionpourra utiliser cette methode
gregal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/05/2006, 15h17   #5
Membre habitué
 
Inscription : mai 2004
Messages : 200
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 200
Points : 101
Points : 101
Bon je viens de regarder, et ben c'est pas gagner, car j'ai trouver des exemple ( pas enorme) qui me dis qu'il faut que j'exporte mon doc excel en .csv, et que j'apllique le script pour l'insertion dans la bdd, mais moi dans mon application, il agit sur plusieur table et non sur une seul comme dans les exemples.

De plus, comment faire pour ne pas prendre la première ligne du fichier csv, qui coresspond au non de mes champs dans la bdd mysql.

la je sens que je risque que bien galèrer pour faire ce truc

si vous avez des esemples un peu plus concret que ce que j'ai pu trouver

++
gregal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/05/2006, 15h30   #6
Rédacteur
 
Avatar de Swoög
 
Inscription : janvier 2003
Messages : 6 053
Détails du profil
Informations personnelles :
Âge : 24

Informations forums :
Inscription : janvier 2003
Messages : 6 053
Points : 7 144
Points : 7 144
Envoyer un message via MSN à Swoög Envoyer un message via Skype™ à Swoög
salut !

voilà une petite fonction qui te renvoie le contenu de ton fichier CSV dûment parsé dans un tableau à deux dimensions ([ligne][colonne])

petit plus rien que pour toi, si tu spécifie le second argument à true, alors la première ligne est supprimées et en plus, chaque colonne est accessible par son nom (en plus de par son numéro)

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function parse_csv($file, $head = false)
{
   $content = file($file);
   $headers = NULL;
   if($head)
   {
      $headers = array_shift($content);
      $headers = explode(',', $headers);
   }
   foreach($content as $k => $v)
   {
        $content[$k] = explode(',', $v);
        if($head) foreach($content[$k] as $num_col => $value)
            $content[$k][$headers[$num_col]] = $value;
   }
   return $content;
}
ensuite, il te suffit de faire le traitement que tu veux avec le contenu du fichier (tu peux sans problème mettre à jour plusieurs tables, tout dépend du contenu de ton fichier )

Je pense que cette structure devrait t'aider ^^
__________________
Rédacteur "éclectique" (XML, IRC, Web...)
Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
pensez à la balise [code] (bouton #) et au tag (en bas)
Swoög est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/05/2006, 15h38   #7
Membre habitué
 
Inscription : mai 2004
Messages : 200
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 200
Points : 101
Points : 101
merci beaucoup , il est clair que ta fonction va bien m'aider, seulement il me reste une interrogation, du moin un truc que je ne vois pas commnt je peux faire, c'est pour ce qui est de l'insertion dans plusieurs tables. en effet comment je dois crée on doc excel pour pouvoir mettre plusiur table.

je m'explique, sur une ligne je rentre tous les champs de ma table prospect, mais pour rentrer les champs de ma table de liaison qui sont de quatre, je le smet à la suite, comment faire?

je peux te joindre la tete de mon excel si tu veux pour voir comment c bati.

je te remercie pour ta fonction en tout cas
gregal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/05/2006, 15h46   #8
Rédacteur
 
Avatar de Swoög
 
Inscription : janvier 2003
Messages : 6 053
Détails du profil
Informations personnelles :
Âge : 24

Informations forums :
Inscription : janvier 2003
Messages : 6 053
Points : 7 144
Points : 7 144
Envoyer un message via MSN à Swoög Envoyer un message via Skype™ à Swoög
je pense qu'il faudrait plutôt un exemple de ligne csv et de la répartition des différentes colonnes dans les différentes tables
__________________
Rédacteur "éclectique" (XML, IRC, Web...)
Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
pensez à la balise [code] (bouton #) et au tag (en bas)
Swoög est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/05/2006, 15h49   #9
Membre habitué
 
Inscription : mai 2004
Messages : 200
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 200
Points : 101
Points : 101
je peux te faire un zip, de mon excel, le csv enregistré a partir de ce dernier, et si tu veux mon sql, ou alors dis moi ce qui t'interesserai pour voir

lol

je te fournis ce que tu veux

merci beaucoup
gregal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/05/2006, 15h54   #10
Rédacteur
 
Avatar de Swoög
 
Inscription : janvier 2003
Messages : 6 053
Détails du profil
Informations personnelles :
Âge : 24

Informations forums :
Inscription : janvier 2003
Messages : 6 053
Points : 7 144
Points : 7 144
Envoyer un message via MSN à Swoög Envoyer un message via Skype™ à Swoög
comme dit, ce qu'il faudrait c'est ce qui représente l'équivalent d'un enregistrement dans le csv et la répartition dans la bdd, exemple :

ligne du csv : Répartition :
Citation:
les lignes col1 et col2 sont insérés dans table1
col1 et col3 dans table3
col3 et col4 dans table3
__________________
Rédacteur "éclectique" (XML, IRC, Web...)
Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
pensez à la balise [code] (bouton #) et au tag (en bas)
Swoög est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/05/2006, 16h03   #11
Membre habitué
 
Inscription : mai 2004
Messages : 200
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 200
Points : 101
Points : 101
alors je te montre comment est bati le fichier csv, je te dis de suite qu'il y a des champs pas obligatoire, c'est pour sa qu'il y a plusieurs point virgule à la suite

Citation:
Fichier CSV :

id_etat;nom_societe;nom_responsable_societe;adress_societe;
code_pos_societe;ville_societe;tel_fixe_societe;fax_societe;
tel_portable_societe;email_societe;remarque_entretiens;
domaine_site_societe;url_site_societe;note_site;commentaire_site;
date_debut_hebergement;date_fin_hebergement;;
id_dept;num_societe;date_rappel;date_signature
1;asse;romeyer;;;St etienne;;;;contact@asse.Fr;;asse.fr;http://www.asse.fr;
8;;;;;42;1;23/07/2006 10:00;05/09/2006
et jusqu'a a date_fin_hebergement inclus, c'est insertion table propsect,et pour les quatre dernier table publie

voilou j'espère que sa t'ira

ps: il y a une ligne d'enregsitrement comme sa o pif, c'etais pour te montrer
gregal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/05/2006, 16h29   #12
Rédacteur
 
Avatar de Swoög
 
Inscription : janvier 2003
Messages : 6 053
Détails du profil
Informations personnelles :
Âge : 24

Informations forums :
Inscription : janvier 2003
Messages : 6 053
Points : 7 144
Points : 7 144
Envoyer un message via MSN à Swoög Envoyer un message via Skype™ à Swoög
ok, il y a bien une clée qui permet de relier les deux tables ?
__________________
Rédacteur "éclectique" (XML, IRC, Web...)
Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
pensez à la balise [code] (bouton #) et au tag (en bas)
Swoög est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/05/2006, 16h32   #13
Membre habitué
 
Inscription : mai 2004
Messages : 200
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 200
Points : 101
Points : 101
oui num_societe
__________________
La programmation, c'est tout un art
gregal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/05/2006, 16h37   #14
Nouveau Membre du Club
 
Avatar de flydragon
 
Inscription : février 2006
Messages : 121
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 121
Points : 25
Points : 25
Utilise du csv et fetgcsv apres tu fais un while et met tout ca dans un tableau
c pas plus compliqué que ca
va pas chercher midi a quatorze heure
flydragon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/05/2006, 16h38   #15
Rédacteur
 
Avatar de Swoög
 
Inscription : janvier 2003
Messages : 6 053
Détails du profil
Informations personnelles :
Âge : 24

Informations forums :
Inscription : janvier 2003
Messages : 6 053
Points : 7 144
Points : 7 144
Envoyer un message via MSN à Swoög Envoyer un message via Skype™ à Swoög
dans ce cas, tout simplement :
Code :
1
2
INSERT INTO propsect (id_etat, nom_societe, ..., num_societe) VALUES (1, 'asse', ...., 1)
INSERT INTO publie (id_dept, num_societe, ...) VALUES (42, 1, ...)
il te suffit de faire deux requête par lignes (ou mieux, générer deux requêtes, une pour chaque table grâce aux instertions multiples)

et voilà
__________________
Rédacteur "éclectique" (XML, IRC, Web...)
Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
pensez à la balise [code] (bouton #) et au tag (en bas)
Swoög est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/05/2006, 17h03   #16
Membre habitué
 
Inscription : mai 2004
Messages : 200
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 200
Points : 101
Points : 101
Bon alors j'ai tester ta fonction avec mon fichier csv qui me sert de test

sa me donne le code suivant :
Code :
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
 
function parse_csv($file, $head = false)
{
   $content = file($file);
   $headers = NULL;
   if($head)
   {
      $headers = array_shift($content);
      $headers = explode(',', $headers);
   }
   foreach($content as $k => $v)
   {
        $content[$k] = explode(',', $v);
        if($head) foreach($content[$k] as $num_col => $value)
            $content[$k][$headers[$num_col]] = $value;
   }
   return $content;
}
 
  /* On ouvre le fichier à importer en lecture seulement */
 
 $fichier="test.csv";
 if (file_exists($fichier))
     $fp = fopen("$fichier", "r"); 
 else
     { /* le fichier n'existe pas */
       echo "Fichier introuvable !<br>Importation stoppée.";
       exit();
     }
  $retour=parse_csv($fichier, $head = false);
  //print_r($retour);
  echo $retour[1][1];
quand je fais l'echo, rien ne s'affiche, alors que si je fais le print_r($retour) il me ressort un résultat, je ne comprend pas des masse, de plus pour les requetes d'insertion, c'est à quelle moment que je dois les faire, il faut que je compte le nombre de ligne dans le fichier? que je bouce sur le nombre de ligne, comment savoir quand je dois faire la requete pour la deuxième table?

c'est la galère
__________________
La programmation, c'est tout un art
gregal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/05/2006, 17h13   #17
En attente de confirmation mail
 
Inscription : mars 2005
Messages : 77
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 77
Points : 30
Points : 30
Personellement j'utiliserais les pilotes ODBC pour excel.
Dans le panneau de config, tu vas dans outils d'administration, et là t'as un outil nommé sources de données (ODBC) grace auquel tu sélectionne ton fichier Excel comme étant une de ces sources de données, tu verras c'est très simple.
Ensuite, tu n'as plus qu'a utiliser ce fichier comme une base de donnée normale ...
et là sincerement copier des tables entre bases de données ca tient sur quelques lignes et c'est assez facile à faire en php.
Moi je trouve ce genre de choses très pratiques et faut avouer que pour le coup, Microsoft a fait du très bon boulot car éxécuter des requête en sql 89 sur un fichier excel ou meme un fichier texte ... Je dis bravo a celui qui a codé ces drivers.
WalidNat est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/05/2006, 17h38   #18
Membre habitué
 
Inscription : mai 2004
Messages : 200
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 200
Points : 101
Points : 101
Merci WalidNat, mais je ne peux pas faire comme ça, il me faut un scrip qui me le gère
__________________
La programmation, c'est tout un art
gregal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/05/2006, 17h51   #19
Rédacteur
 
Avatar de Swoög
 
Inscription : janvier 2003
Messages : 6 053
Détails du profil
Informations personnelles :
Âge : 24

Informations forums :
Inscription : janvier 2003
Messages : 6 053
Points : 7 144
Points : 7 144
Envoyer un message via MSN à Swoög Envoyer un message via Skype™ à Swoög
Alors, il faut modifier un peu la fin de ton script :
Code :
1
2
3
4
5
6
7
8
9
$fichier="test.csv";
 if (!file_exists($fichier))
     { /* le fichier n'existe pas */
       echo "Fichier introuvable !<br>Importation stoppée.";
       exit();
     }
  $retour=parse_csv($fichier);
  //print_r($retour);
  echo $retour[1][1];
de plus, il faut modifier la fonction que j'avais faite, j'avais mis , comme séparateur, alors que c'est ; :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function parse_csv($file, $head = false)
{
   $content = file($file);
   $headers = NULL;
   if($head)
   {
      $headers = array_shift($content);
      $headers = explode(';', $headers);
   }
   foreach($content as $k => $v)
   {
        $content[$k] = explode(';', $v);
        if($head) foreach($content[$k] as $num_col => $value)
            $content[$k][$headers[$num_col]] = $value;
   }
   return $content;
}
ça devrait mieux marcher avec ça...

pour ensuite faire toutes les requêtes, il te suffit de faire (je prend que deux requêtes pour toutes les insertions )
Code :
1
2
3
4
5
6
7
8
9
10
$content = parse_csv('file.csv');
$insert1 = array();
$insert2 = array();
for($i = 0; $i < count($content); ++$i)
{
    $insert1[] = '('.$content[$i][0].', \''.$content[$i][1].\', ....)';
    $insert2[] = '('.$content[$i][_col_pour_table2].'....)';
}
mysql_query('INSERT INTO table1 (champ1, champ2, champ3, champ4, ...) VALUES '.implode(', ', $insert1));
mysql_query('INSERT INTO table2 (champ1, champ2, champ3, champ4, ...) VALUES '.implode(', ', $insert2));
voilà

ensuite pour savoir quels champs choisir, il suffit que tu prennes les colones de ton CSV
__________________
Rédacteur "éclectique" (XML, IRC, Web...)
Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
pensez à la balise [code] (bouton #) et au tag (en bas)
Swoög est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/05/2006, 16h26   #20
Membre habitué
 
Inscription : mai 2004
Messages : 200
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 200
Points : 101
Points : 101
ok merci swog je vais essayer, je te tiens au courant
__________________
La programmation, c'est tout un art
gregal est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h17.


 
 
 
 
Partenaires

Hébergement Web