Recuperer données SQL en fichier Excel

Recuperer données SQL en fichier Excel - PHP - Programmation

Marsh Posté le 13-06-2006 à 22:18:07    

Bonsoir ,je developpe en ce moment un petit site en Php et dedans j'effectue quelques requêtes SQL sur ma base de donnée, et j'aimerai savoir si il existerai une technique de permettre à l'utilisateur de recuperer ces données sous forme de feuille excel ou quelque chose de semblable?  
 
merci d'avance :D

Reply

Marsh Posté le 13-06-2006 à 22:18:07   

Reply

Marsh Posté le 13-06-2006 à 22:59:46    

Pas au format excel directement.
Par contre tu peut exporter ta BDD au format texte, avec séparateur de champs ``;``, de ligne par un retour chariot, les chaînes de caractères étant délimitées par des doubles guillemets ".
Puis importer le format texte sous excel.


Message édité par nargy le 13-06-2006 à 23:01:04
Reply

Marsh Posté le 14-06-2006 à 08:35:19    

comment exporter en format texte?
desolé en php comme en mysql je suis tres novice donc je ne connais pas trop les outils.

Reply

Marsh Posté le 14-06-2006 à 09:16:15    

Par exemple, pour exporter une table produit, avec les champs reference (nombre entier), description (texte), prix (nombre à virgule):

Code :
  1. <?
  2.   // connection et sélection d'une base
  3.   $db=mysql_connect(...); // à remplir
  4.   if(!$db) die("Erreur: ".mysql_error());
  5.   // indiquer que ce qui suit est un fichier texte en français:
  6.   header("Content-type: text/plain; charset=ISO-8859-1" );
  7.   // selectionner tous les produits de la table
  8.   $res=mysql_query("SELECT * FROM produits;" );
  9.   // parcourrir tous les produits trouvés
  10.   while($prod=mysql_fetch_array($res))
  11.   {
  12.     // nombre entier
  13.     echo $produit['reference'];
  14.     echo ";"; // séparateur de champs
  15.     // chaîne, avec des guillemets
  16.     echo '"'.addslashes($produit['description']).'"';
  17.     echo ";"; // séparateur de champs
  18.     // nombre à virgule
  19.     echo $produit['prix'];
  20.     echo "\r\n"; // séparateur de ligne
  21.   }
  22. ?>


Ok, je n'ai pas testé le code, mais tu peut partir sur cette base. Je ne me rappelle plus s'il faut échapper les séparateurs ``;`` dans les chaînes. Si ça te coupe un champs texte en plusieurs colonnes c'est qu'il y a un problème à ce niveau.
Le fichier renvoyé par le script et de type texte.
 
Edit: ha ouais, j'ai jamais utilisé PEAR... c'est sûr s'il y a des trucs tout fait pour l'export, c'est plus simple.


Message édité par nargy le 14-06-2006 à 10:41:52
Reply

Marsh Posté le 14-06-2006 à 09:22:02    

ce dont il parle, c'est un export au format "CSV". Excel sait très bien ouvrir nativement ce genre de fichiers. sinon, y'a une lib GPL qui s'appelle "spreadsheet" (voir sur le site de PEAR, c'est un package)...

Reply

Marsh Posté le 14-06-2006 à 20:53:35    

ok merci
je dois encore bosser sur quelques requêtes ce soir, si j'ai le temps je jete un coup d'oeil à cela après, merci de vôtre aide en tout cas

Reply

Marsh Posté le 14-06-2006 à 23:06:19    

bon je viens d'essayer et j'ai ce probleme
 
Warning: Cannot modify header information - headers already sent by (output started at /home/.filer4/.../mafeuilleV3.php:8) in /home/.filer4/.../Spreadsheet/Excel/Writer.php on line 67,68,69,70,71     et également
 
Fatal error: Call to undefined function: write() in /home/.filer4/.../mafeuilleV3.php on line 412
 
 
j'arrive pas a le resoudre,et j'ai bien amené le fichier writer.php donc je en sais pas pourquoi la methode write() ne fonctionne pas
 
sur ce je vais me coucher bonne nuit,avec un peu de chance j'aurai des reponses demain matin :D

Reply

Marsh Posté le 15-06-2006 à 08:05:58    

Tu peut poster le code?
 
Le première erreur est dûe au fait que tu doit utiliser la fonction header() avant d'envoyer des caractères sur la sortie.
Principales causes:

  • tu utilise une fonction write(), echo, print() ... avant header()
  • tu as un morceau de HTML avant la balise PHP <? ?> (ça peut être un espace, un retour à la ligne, ça peut provenir d'un fichier inclu avec include() ou require())
  • un message d'erreur s'est affiché avant header()

Reply

Marsh Posté le 15-06-2006 à 20:34:54    

je viens de rentrer de la fac, je posterai mon code ce soir et j'essayerai malgré tout de chercher également de mon coté

Reply

Marsh Posté le 15-06-2006 à 21:06:22    

nargy a écrit :

Tu peut poster le code?
 
Le première erreur est dûe au fait que tu doit utiliser la fonction header() avant d'envoyer des caractères sur la sortie.
Principales causes:

  • tu utilise une fonction write(), echo, print() ... avant header()
  • tu as un morceau de HTML avant la balise PHP <? ?> (ça peut être un espace, un retour à la ligne, ça peut provenir d'un fichier inclu avec include() ou require())
  • un message d'erreur s'est affiché avant header()


 
Voila mon code :
 

Code :
  1. require_once 'Spreadsheet/Excel/Writer.php';
  2. // Création d'un manuel de travail
  3. $workbook = new Spreadsheet_Excel_Writer();
  4. // Envoi des en-têtes HTTP
  5. $titre4="mostvisitedconcept$selection.xls";
  6. $workbook->send($titre4);
  7. // Création d'une feuille de travail
  8. $nom4="Concepts les plus visités par $son_nom $son_prenom ";
  9. $worksheet =& $workbook->addWorksheet($nom4);
  10. // une mise en forme pour les titre
  11. $format_title =& $workbook->addFormat();
  12. $format_title->setBold();
  13. $format_title->setColor('black');
  14. $format_title->setPattern(1);
  15. $format_title->setFgColor('blue');
  16. $format_title->setAlign('center');
  17. // une mise en forme pour le contenu
  18. $format_data =& $workbook->addFormat();
  19. $format_data->setAlign('center');
  20. $format_data->setTextWrap();
  21. $format_data->setHAlign('left');
  22. $format_data->setVAlign('top');
  23. // nombre de colonne ds la table
  24. $nb = mysql_num_fields($req4bis);
  25. // pour chaque colonne je met le titre ds la première ligne du fichié
  26. for($i=0;$i<$nb;$i++){
  27.  $worksheet->write(0, $i, mysql_field_name ( $req4, $i),$format_title);
  28.  if(mysql_field_len ( $req4, $i ) > 50 )
  29.   $worksheet->setColumn ($i, $i, 50);
  30.  else
  31.   $worksheet->setColumn ($i, $i, 20);
  32. }
  33. $u=1;
  34. // tant qu'il y a des enregistrements
  35. while($data = mysql_fetch_array($req4)){
  36.  // de la première à la desnière colonne
  37.  for($i=0;$i<$nb;$i++){
  38.   // j'écrit mes données
  39.   $worksheet->write( $u, $i, $data[$i], $format_data);
  40.  }
  41.  $u++;
  42. }
  43. //mysql_close();
  44. // Envoi du fichier
  45. $workbook->close();


 
 
voila et je met ce code dans un fichier php ou il y a plusieurs fois du html et du php, je pensais que je pouvais le mêler à ma page.
Il s'agit d'un formulaire qui traite les infos en fonction de ce qui a été choisi dans le formulaire ,et affiche ces info en dessous du formulaire.

Reply

Marsh Posté le 15-06-2006 à 21:06:22   

Reply

Marsh Posté le 16-06-2006 à 22:27:48    

Bon j'arrive decidement pas du tout à m'en servir,si quelqu'un pouvait m'aider ca serait tres sympa !
je laisse mon msn au cas ou
 
sylvnrter@hotmail.fr

Reply

Marsh Posté le 18-06-2006 à 10:56:53    

avant Spreadsheet_Excel_Writer, t'as essayé d'exporter tes données en csv? Parce que si ça suffit pour ce que tu veux faire, pas la peine de te prendre la tête avec cette lib...

Reply

Marsh Posté le 18-06-2006 à 22:55:19    

je l'ai fait en csv ca marche bien mais bon je sais pas trop si c'est possible de mettre des cadres ou de faire des jeux sur le texte (par exemple mettre le titre de la table en bold,et mettre un cadre autour de mes données quoi)

Reply

Marsh Posté le 19-06-2006 à 10:31:12    

sylvnr a écrit :

je l'ai fait en csv ca marche bien mais bon je sais pas trop si c'est possible de mettre des cadres ou de faire des jeux sur le texte (par exemple mettre le titre de la table en bold,et mettre un cadre autour de mes données quoi)


 
non, ça, c'est pas possible en csv.

Reply

Marsh Posté le 19-06-2006 à 22:45:37    

ah
bah dommage  
je ferais sans merci quand meme :(

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed