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

PHP & Base de données Discussion :

SQL vers Excel : comment ajouter de nouvelles feuilles ?


Sujet :

PHP & Base de données

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 6
    Points : 3
    Points
    3
    Par défaut SQL vers Excel : comment ajouter de nouvelles feuilles ?
    Bonjour

    J'exporte des tableaux stockés dans une base de données SQL vers un fichier Excel avec PHP :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $sql = "SELECT leTableau FROM tableSQL";
    $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
    $data = mysql_fetch_array($req);
    $tableau = $data[leTableau];
     
    header("Content-Type: application/vnd.ms-excel");
    header("Expires: 0");
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    header("Content-disposition: filename=toto.xls");
     
    $affiche=addslashes($tableau);
     
    echo "$affiche\r\n";
    Ca marche très bien.

    Je voudrais en revanche ajouter des feuilles à ce fichier Excel SANS UTILISER DE CLASSES supplémentaires de gestion d'Excel (elles nécessitent de remplir les cellules Excel une par une, or je colle des tableaux HTML entiers dont je ne peux isoler le contenu - ils ont des formats différents).

    Si, justement, les classes de gestion d'Excel en PHP permettent de créer de nouvelles feuilles, je dois pouvoir le faire "à la main" en PHP, non ?
    Vous avez une idée ?

    Merci d'avance !

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Ce que tu fais (apparemment ecrire du html dans un fichier auquel tu donnes l'extension .xls) ça ne produit pas un fichier au format excel.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 6
    Points : 3
    Points
    3
    Par défaut mais si...
    Mais si, avec les header qui conviennent (cf le code ci-dessus) tu génères bien un fichier Excel et pas HTML, c'est une technique connue.
    Essaye ce bout de code, tu verras.

    Ce que je connais pas, c'est comment ajouter une nouvelle feuille au fichier généré...

  4. #4
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Citation Envoyé par lesideesnet
    Mais si, avec les header qui conviennent (cf le code ci-dessus) tu génères bien un fichier Excel et pas HTML, c'est une technique connue.
    Essaye ce bout de code, tu verras.
    Mais non
    Les instructions que tu indique dans l'entête ne font qu'indiquer que le contenu sera à télécharger (et non à afficher), et de plus, c'est toi qui au départ à créer de toute pièce le contenu Excel, et aussi indique le nom que prendra le fichier, de même son extension.
    Donc c'est toi qui fait tout de A à Z.

    Le seul automatisme ici, c'est que le navigateur (coté client) va interpréter l'entête, et le système va déclencher une fenêtre permettant à l'utilisateur de choisir quoi faire avec, comme déposer le fichier sur son disque ou l'ouvrir avec un Soft.
    C'est tout.

    Donc c'est toi qui produit ou génère tout dans cette affaire, l'entête, c'est juste une (petite) indication pour le navigateur.

    De plus, si tu espère afficher le contenu Excel dans le navigateur, ça ne va pas le faire, car sauf erreur, aucun navigateur n'est capable d'interpréter du contenu Excel (A part des Softs comme MS Excel et Calc d'Open Office).
    A moins que ça soit une nouveauté, et que je ne sois pas au courant.


    Si tu veux rajouter une feuille dans ce fichier Excel qui est à télécharger, il faudra le faire avant, c'est à dire au moment où tu le crée avec la classe Php/Excel.
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Ben si
    Execute le code, tu verras qu'effectivement le navigateur te propose de télécharger un fichier Excel avec le tableau que tu y as injecté (le but n'est pas de l'ouvrir dans le navigateur, mais bien de télécharger le fichier Excel, ce qui fonctionne).

    C'est un truc que j'avais trouvé sur le Net il y a longtemps et qui est très pratique pour générer des fichiers Excel avec des tableaux de formatage très différents (donc sans avoir à retraiter leur contenu avec des expressions régulières pour en récupérer les données).

    Je sais bien que je dois demander la création d'une nouvelle feuille au moment de la génération... la question est justement comment.

    Si j'utilise des classes PHP/Excel (WriteExcel, PHPExcel...) je peux facilement générer de nouvelles feuilles. Mais avec ces classes, on remplit chaque feuille Excel cellule par cellule, ce qui suppose donc d'avoir isolé chaque donnée du tableau HTML que l'on souhaite y injecter. Possible quand on a des tableaux à peu près formatés de façon identique, mais quand tous ont des colspan et rowspan répartis aléatoirement dans le tableau, je ne vois pas trop comment systématiser la récupération de chaque cellule via des expressions régulières...

  6. #6
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Execute le code, tu verras qu'effectivement le navigateur te propose de télécharger un fichier Excel avec le tableau que tu y as injecté
    Quel tableau ? Il sort d'où le tableau ?
    Un tableau HTML que le navigateur convertirait en fichier Excel ?

    Juste comme ça, as tu ouvert le fichier avec le bloc note par exemple ?
    Comment le code est il retranscrit, converti ?

    A mon sens, ce serait au format CSV, car je vois mal un navigateur créer un vrai fichier Excel, à part peut être IE (encore que).


    Si c'est le cas, faudrait voir si le format CSV accepte une instruction comme ajouter une nouvelle feuille, car je doute fort que cela existe en HTML, je n'ai pas connaissance d'une telle balise.


    Toujours est il que je ne savais qu'un navigateur était capable de convertir du HTML en Excel, malgré que cela existerait depuis longtemps.
    On en apprend tous les jours finalement.
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Ben dans mon code, $tableau est une variable qui stocke la totalité d'un tableau HTML (mon pb est de récupérer sous Excel les données d'un tableau HTML, qui est lui-même stocké dans UN champ d'une base SQL... c'est stupide de stocker tout un tableau dans un seul champ d'une base de données, je sais, je récupère un boulot baclé et mal ficelé).

    Je viens d'ouvrir dans le bloc-notes mon fichier Excel exporté (sous IE ou Firefox, ça marche) : tu as parfaitement raison, ça n'est rien de plus que le code HTML du tableau lui-même (de <table> à </table>).

    C'est donc Excel qui fait le boulot derrière en ouvrant le fichier : il place chaque cellule du tableau dans une cellule de la feuille Excel... très fort. Ce qui ressemble à un vrai fichier Excel.

    Bref tu as raison, impossible de créer une nouvelle feuille

  8. #8
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    A ben zut alors, moi qui croyait apprendre un nouveau truc, ça ne sera pas pour ce coup ci.
    Tout ceci n'était donc qu'une illusion.

    Te reste plus que l'artillerie lourde : La classe Php/Excel
    Ceci dit, comme tu enregistre les données au format HTML, il faudrait voir si un format comme le XML ne serait pas plus adapté, voir même du XML spécifique à l'Excel, car du XML brut, j'en doute.


    L'idéal cependant aurait été de ne pas enregistrer tout le contenu dans un seul champ, mais de tout éclater (tables, champs) afin de produire n'importe quel type de document à partir de ces données : XML, PDF, CSV, XLS, etc ...
    M'enfin, c'est peut être plus facile à dire qu'à faire
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

Discussions similaires

  1. [MySQL] Exportation SQL vers Excel
    Par Foudébois dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 28/08/2006, 15h56
  2. Réponses: 2
    Dernier message: 06/07/2006, 13h09
  3. Résultat d'une requete SQL vers Excel
    Par climz dans le forum Access
    Réponses: 6
    Dernier message: 09/05/2006, 15h44
  4. Exporter des données d'un requete SQL vers excel (csv)
    Par PrinceMaster77 dans le forum ASP
    Réponses: 9
    Dernier message: 08/10/2005, 22h28
  5. [Excel] comment savoir si une feuille est ouverte ?
    Par scully2501 dans le forum Access
    Réponses: 11
    Dernier message: 07/10/2005, 15h02

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