IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques et frameworks PHP Discussion :

[Excel] PHP et Excel


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre habitué
    Inscrit en
    Mai 2004
    Messages
    201
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 201
    Points : 140
    Points
    140
    Par défaut [Excel] 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

  2. #2
    Membre confirmé
    Profil pro
    Développeur Web
    Inscrit en
    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 : 557
    Points
    557
    Par défaut
    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)

  3. #3
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    Salut !

    si ton fichier Excel est relativement simple, tu peux toujours l'exporter un CSV

  4. #4
    Membre habitué
    Inscrit en
    Mai 2004
    Messages
    201
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 201
    Points : 140
    Points
    140
    Par défaut
    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

  5. #5
    Membre habitué
    Inscrit en
    Mai 2004
    Messages
    201
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 201
    Points : 140
    Points
    140
    Par défaut
    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

    ++

  6. #6
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    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 : 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
    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 ^^

  7. #7
    Membre habitué
    Inscrit en
    Mai 2004
    Messages
    201
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 201
    Points : 140
    Points
    140
    Par défaut
    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

  8. #8
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    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

  9. #9
    Membre habitué
    Inscrit en
    Mai 2004
    Messages
    201
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 201
    Points : 140
    Points
    140
    Par défaut
    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

  10. #10
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    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 :
    les lignes col1 et col2 sont insérés dans table1
    col1 et col3 dans table3
    col3 et col4 dans table3

  11. #11
    Membre habitué
    Inscrit en
    Mai 2004
    Messages
    201
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 201
    Points : 140
    Points
    140
    Par défaut
    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

    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

  12. #12
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    ok, il y a bien une clée qui permet de relier les deux tables ?

  13. #13
    Membre habitué
    Inscrit en
    Mai 2004
    Messages
    201
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 201
    Points : 140
    Points
    140
    Par défaut
    oui num_societe

  14. #14
    Membre du Club Avatar de flydragon
    Inscrit en
    Février 2006
    Messages
    121
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 121
    Points : 57
    Points
    57
    Par défaut
    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

  15. #15
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    dans ce cas, tout simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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à

  16. #16
    Membre habitué
    Inscrit en
    Mai 2004
    Messages
    201
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 201
    Points : 140
    Points
    140
    Par défaut
    Bon alors j'ai tester ta fonction avec mon fichier csv qui me sert de test

    sa me donne le code suivant :
    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
     
    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

  17. #17
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 77
    Points : 69
    Points
    69
    Par défaut
    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.

  18. #18
    Membre habitué
    Inscrit en
    Mai 2004
    Messages
    201
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 201
    Points : 140
    Points
    140
    Par défaut
    Merci WalidNat, mais je ne peux pas faire comme ça, il me faut un scrip qui me le gère

  19. #19
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    Alors, il faut modifier un peu la fin de ton script :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : 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
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  20. #20
    Membre habitué
    Inscrit en
    Mai 2004
    Messages
    201
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 201
    Points : 140
    Points
    140
    Par défaut
    ok merci swog je vais essayer, je te tiens au courant

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Excel] Comment lire des fichiers excel avec php?
    Par dear_rihab dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 02/11/2007, 12h38
  2. [PEAR][Spreadsheet] PHP/EXPORT EXCEL : nombre de formats de cellule différents !
    Par joe_le_mort dans le forum Bibliothèques et frameworks
    Réponses: 6
    Dernier message: 27/10/2005, 17h21
  3. [Excel] PHP-MYSQL exportation de données vers un fichier excel
    Par toure32 dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 19/10/2005, 19h29
  4. Réponses: 6
    Dernier message: 19/09/2005, 12h55
  5. VB/EXCEL/DATES/PHP
    Par JBLCN dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 05/08/2005, 08h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo