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 --> Excel


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 104
    Points : 50
    Points
    50
    Par défaut [Excel] PHP --> Excel
    En fait je voudrais que l’utilisateur puisse télécharger un fichier au format excel avec le résultat d’une requete access (qui contient 10000 lignes environ c’est pour ca que je ne veux pas l’afficher directement sur ma page php) donc je voulais savoir si c’est possible de le faire directement sur php (si oui comment parce que j’en ai vraiment aucune idée…) ou si non comment faire autrement ! ! merci d’avance pour vos réponses !En gros l'idée c'es ca: si l'utilisateur choisit de télécharger le fichier, php copie le résultat d'une requete (un tableau en l'occurence) dans un fichier excel.
    merci de vos réponses!

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

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

    pour la génération du fichier Excel, http://fr.php.net/com ou recherche sur le forum

    pour le téléchargement, recherche téléchargement forcé sur le forum ou sur google

    Les deux demandes sont très très très courantes
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, 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)

  3. #3
    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
    Comme je l'ai déjà fait avant, je le conseille encore une fois

    Ce package PEAR est vraiment très pratique pour la génération de fichiers Excel:

    http://pear.php.net/package/Spreadsheet_Excel_Writer
    Merci à Microsoft pour avoir transformé un métier relativement terne et basé sur une approche bêtement technique et rigoureuse des faits, en challenge quotidien, nécessitant une remise en question permanente à l'échelle du quart d'heure

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 104
    Points : 50
    Points
    50
    Par défaut
    Bonjour, j'ai telecharger le package dont tu as parlé mais je n'ai pas tres bien compris son fonctionnement...

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 104
    Points : 50
    Points
    50
    Par défaut
    J'ai effectué quelques recherches (y'a pas grand chose a ce sujet mais bon...) j'ai surtout trouvé ca : http://stephaneey.developpez.com/tutoriel/php/phpexcel/ (la partie 3 surtout)
    mais en fait c'est beaucoup trop technique pour moi et y'a plusieurs choses que je comprends pas:
    - le fichier excel est créé chez moi ou chez l'utilisateur?
    - s'il est créé chez moi est il possible de faire en sorte qu'il soit créer que chez l'utilisateur?
    - moi je voudrais juste copier coller le résultat de la requete dans excel, il n'y a ni mise en forme ni calcul, y'a pas quelque chose de plus simple? ou alors quelqu'un peut il m'aider a simplifier ce code pour mon cas?
    merci d'avance de vos réponses et de votre aide...

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    496
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 496
    Points : 585
    Points
    585
    Par défaut
    Salut,

    dans un autre style (bcp + simple), tu peux construire une tableau html que tu remplis avec tes données et l'enregistrer dans un fichier excel.

    Va voir ici, jlavais déjà expliqué à qlq'un d'autre.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 104
    Points : 50
    Points
    50
    Par défaut
    en fait mon probléme c'est que c'est des requetes de 10000 lignes et donc les faire afficher en html ca fait lourd... mais si tu me dis que c'est bon! je veux bien essayer...

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    496
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 496
    Points : 585
    Points
    585
    Par défaut
    Tu ne dois pas afficher le tableau à l'écran, juste l'enregsitrer dans le fichier .xls.

    Je n'ai jamais testé ce script avec autant de ligne mais comme c pas très compliqué, ca vaut le coup de tenter.

    En résumé, tu fais comme ça (en construisant ton tab évidemment):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php
    header("Content-Type: application/vnd.ms-excel");
    header("Expires: 0");
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    header("content-disposition: attachment;filename=test.xls");
     
    $text = "<table>";
    $text .= "<tr><td>Contact</td></tr>";
    $text .= "</table>";
    echo $text;
    ?>
    Et tu auras une boite de dialogue pour enregistrer le fichier qui va apparaitre.

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 104
    Points : 50
    Points
    50
    Par défaut
    C'est clair que le code que tu m'as donné il est bien pratique... par contre mon problème c’est que je récupère les données de la table avec ca :
    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
     
    <table>
    <tr>
    <th><h3> Identifiant </th> <th><h3> Nom </th> 
    <th><h3> Complément </th> <th><h3> Adresse </th> 
    <th><h3> Ville </th> <th><h3> Téléphone </th> 
    <th><h3> Fax </th></tr>
    <?
    $req_sql = " SELECT adm.* 
      FROM pai INNER JOIN adm ON pai.NO_EXTERNE = adm.[NUM+RO_DE_] 
      WHERE pai.CATEGORIE=30 AND pai.MAX_DIRRES=0 
      ORDER BY pai.MONTANT DESC;"; 
    $sql = @odbc_exec($cnx, $req_sql); 
    while(odbc_fetch_row($sql)){ 
      echo "<TR>"; 
      echo "<TD><h5>".odbc_result($sql, 1)."</TD>"; 
      echo "<TD><h5>".odbc_result($sql, 2)." ";
      echo odbc_result($sql, 3)."</TD>";
      echo "<TD><h5>".odbc_result($sql, 4)." ";
      echo odbc_result($sql, 5)."</TD>";
      echo "<TD><h5>".odbc_result($sql, 6)." ";
      echo odbc_result($sql, 7)." ";
      echo odbc_result($sql, 8)."</TD>";
      echo "<TD><h5>".odbc_result($sql, 9)." ";
      echo odbc_result($sql, 10)."</TD>";
      echo "<TD><h5>".odbc_result($sql, 11)."</TD>";
      echo "<TD><h5>".odbc_result($sql, 12)."</TD>";
    }
    ?>
    </table>
    comment l’insérer dans ton code? Merci d’avance

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 104
    Points : 50
    Points
    50
    Par défaut
    Voici ce que j'ai fait :
    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
    33
    34
    35
    36
    <?php
    header("Content-Type: application/vnd.ms-excel");
    header("Expires: 0");
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    header("content-disposition: attachment;filename=test.xls");
    $cnx = odbc_connect( "POLE_STAT_DEMAT" , "" , "" ) 
    or die ("Attention, connexion à la base de donnée impossible<p>");
    $text = "<table>";
    $text = "<tr><th><h3> Identifiant </th> <th><h3> Nom </th> 
    <th><h3> Complément </th> <th><h3> Adresse </th> 
    <th><h3> Ville </th> <th><h3> Téléphone </th> 
    <th><h3> Fax </th></tr>";
    $req_sql = " SELECT TOP 10 adm.* 
    FROM pai INNER JOIN adm 
    ON pai.NO_EXTERNE = adm.[NUM+RO_DE_] 
    WHERE pai.CATEGORIE=30 AND pai.MAX_DIRRES=0 
    ORDER BY pai.MONTANT DESC;"; 
    $sql = @odbc_exec($cnx, $req_sql); 
    $text = "while(odbc_fetch_row($sql)){ 
    echo "<TR>";
    echo "<TD><h5>".odbc_result($sql, 1)."</TD>"; 
    echo "<TD><h5>".odbc_result($sql, 2)." ";
    echo odbc_result($sql, 3)."</TD>";
    echo "<TD><h5>".odbc_result($sql, 4)." ";
    echo odbc_result($sql, 5)."</TD>";
    echo "<TD><h5>".odbc_result($sql, 6)." ";
    echo odbc_result($sql, 7)." ";";
    echo odbc_result($sql, 8)."</TD>";";
    echo "<TD><h5>".odbc_result($sql, 9)." ";
    echo odbc_result($sql, 10)."</TD>";";
    echo "<TD><h5>".odbc_result($sql, 11)."</TD>";
    echo "<TD><h5>".odbc_result($sql, 12)."</TD>";
    }";
    $text = "</table>";
    echo $text;
    ?>
    mais ca marche pas... si quelqu'un a une idée!

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    496
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 496
    Points : 585
    Points
    585
    Par défaut
    Quand tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $text = "<table>";
    $text = "<tr><th><h3> Identifiant </th> <th><h3> Nom </th> 
    <th><h3> Complément </th> <th><h3> Adresse </th> 
    <th><h3> Ville </th> <th><h3> Téléphone </th> 
    <th><h3> Fax </th></tr>";
    La deuxième ligne efface le contenu de la première. Tu dois utiliser la concaténation (avec le point '.'):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $text = "<table>";
    $text .= "<tr><th><h3> Identifiant </th> <th><h3> Nom </th> 
    <th><h3> Complément </th> <th><h3> Adresse </th> 
    <th><h3> Ville </th> <th><h3> Téléphone </th> 
    <th><h3> Fax </th></tr>";
    Puis la boucle pour parcourir tes enregistrements:
    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
    while(odbc_fetch_row($sql))
    { 
    $text .= "<TR>";
    $text .= "<TD><h5>".odbc_result($sql, 1)."</TD>"; 
    $text .= "<TD><h5>".odbc_result($sql, 2)." ";
    $text .= odbc_result($sql, 3)."</TD>";
    $text .= "<TD><h5>".odbc_result($sql, 4)." ";
    $text .= odbc_result($sql, 5)."</TD>";
    $text .= "<TD><h5>".odbc_result($sql, 6)." ";
    $text .= odbc_result($sql, 7)." ";";
    $text .= odbc_result($sql, 8)."</TD>";";
    $text .= "<TD><h5>".odbc_result($sql, 9)." ";
    $text .= odbc_result($sql, 10)."</TD>";";
    $text .= "<TD><h5>".odbc_result($sql, 11)."</TD>";
    $text .= "<TD><h5>".odbc_result($sql, 12)."</TD></TR>";
    }
     
    $text.='</table>';
     
    echo $text;

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 104
    Points : 50
    Points
    50
    Par défaut
    Ok c'est bon ca marche, merci beaucoup billoum
    voila le code si ca interesse quelqu'un:

    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
    33
    34
    35
    36
    37
    38
    39
    40
     
    <?php
    $cnx = odbc_connect( "POLE_STAT_DEMAT" , "" , "" );
    header("Content-Type: application/vnd.ms-excel");
    header("Expires: 0");
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    header("content-disposition: attachment;filename=test.xls");
    $text = "<table border=1>";
    $text .= "<tr><th><h3> Identifiant </th> <th><h3> Nom </th>
    <th><h3> Complément </th> <th><h3> Adresse </th> 
    <th><h3> Ville </th> <th><h3> Téléphone </th> 
    <th><h3> Fax </th></tr>";
    $cnx = odbc_connect( "POLE_STAT_DEMAT" , "" , "" );
    $req_sql = " SELECT TOP 10 adm.* 
      FROM pai INNER JOIN adm ON pai.NO_EXTERNE = adm.[NUM+RO_DE_] 
      WHERE pai.CATEGORIE=30 AND pai.MAX_DIRRES=0 
      ORDER BY pai.MONTANT DESC;"; 
    $color = "#c0ffe0";
    while(odbc_fetch_row($sql)){ 
      if($color=="#e0ffff"){$color = "#c0ffe0";}else{$color = "#e0ffff";}
    $sql = @odbc_exec($cnx, $req_sql);
    while(odbc_fetch_row($sql))
    { 
    $text .= "<TR>";
    $text .= "<TD><h5>".odbc_result($sql, 1)."</TD>"; 
    $text .= "<TD><h5>".odbc_result($sql, 2)." ";
    $text .= odbc_result($sql, 3)."</TD>";
    $text .= "<TD><h5>".odbc_result($sql, 4)." ";
    $text .= odbc_result($sql, 5)."</TD>";
    $text .= "<TD><h5>".odbc_result($sql, 6)." ";
    $text .= odbc_result($sql, 7)." ";
    $text .= odbc_result($sql, 8)."</TD>";
    $text .= "<TD><h5>".odbc_result($sql, 9)." ";
    $text .= odbc_result($sql, 10)."</TD>";
    $text .= "<TD><h5>".odbc_result($sql, 11)."</TD>";
    $text .= "<TD><h5>".odbc_result($sql, 12)."</TD></TR>";
    }
    $text .="</table>";
    echo $text;
    ?>
    sinon je pense pas que ce soit possible mais est ce qu'on peut changer le format de cellule dans php? exemple: je veux faire ressortir des numéros de téléphone mais ca sort comme ca: 4,39E+08 au lieu de 0439... donc voila si quelqu'un sait merci de m'aider! (je peux pas laisser l'affichage comme ca, c'est destiné a des secrétaires qui doivent voir au premier coup d'oeil quoi correspond a quoi... en plus j'ai plusieurs colones qui ont ce problème)

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    496
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 496
    Points : 585
    Points
    585
    Par défaut
    Essaie en mettant <td width='auto'>. Ca changera pas le format (ca reste du texte) mais je pense que ca affichera le contenu de la cellule en entier.

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 104
    Points : 50
    Points
    50
    Par défaut
    merci, ca élargit les colonnes mais le problème reste sensiblement le meme: l'identifiant (15 chiffres environ) est toujours sous forme scientifique (malgré la largeur de la colonne) et il manque le premier 0 du numéro de téléphone... ce serait vraiment bien que tout soit parfait mais bon si y'a pas moyen...

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    496
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 496
    Points : 585
    Points
    585
    Par défaut
    Ime semblait bien que j'avais eu le même problème.

    Bon ca reste du bricolage mais tu peux essaier en encadrant ce champ avec des guillemets, pour forcer excel à le considerer comme une chaine de caractère.

+ 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