excel et mysql

Eléphant du PHP | 148 Messages

28 juil. 2005, 10:20

bonjour
j'aimerais savoir si il est possible d'envoyer des données dans un fichier excel (plus précisément dans un tableur) à partir d'une base de données gérée sous mysql avec easyphp
en fait je crée un formualire sous php et html ensuite j'envoie les données dans une base de données et j'aimerais qu'elle aille directement dans un fichier excel pour pouvoir renvoyer ce format à une institution public par la suite
mon problème est le passage mysql excel
et est il possible de faire ca directement sous php??
MERCI beaucoup

edit mere-teresa : suite de ce sujet
http://www.phpfrance.com/forums/voir_sujet-6494.php

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

28 juil. 2005, 10:22

Tu aurais fait une recherche sur le forum, tu aurais trouvé

renseigne toi sur l'objet COM
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 148 Messages

28 juil. 2005, 10:48

oui j'ai fait une recherhce et j'ai trouvé ceci et ca m'intéresse beaucoup:

1/ Extraite les données de ta table en mode texte

Code:
C:\Program Files\EasyPHP1-8\mysql\bin>mysqldump -h localhost --user root --password xxxx --fields-terminated-by=, --lines-terminated-by=\n --tab=c:\temp pipo T 
 


Si pas de mot de passe (c'est pas bien .... mais en local que pour toi on s'en moque )
Code:
C:\Program Files\EasyPHP1-8\mysql\bin>mysqldump -h localhost --user root --fields-terminated-by=, --lines-terminated-by=\n --tab=c:\temp pipo T 
  

Avec

pipo => nom de ta base
T => nom de ta table


2/ tu obtiens c:\temp\T.sql l'ordre de création de ta table et c:\temp\T.txt les données au format CVS.

3/ depuis Excel, menu Fichier/Ouvrir tu ouvres c:\temp\T.txt. Choisir séparateur virgule (coma in us)

4/ tu modifies dans Excel

5/ tu sauvegardes depuis Excel en format CVS (menu Fichier\Enregistrer sous ... choisir type CSV comma delimited) dans T2.txt

6/ tu vides ta table T

7/ tu utilises l'utilitaire mysqlimport (dans C:\Program Files\EasyPHP1-8\mysql\bin) pour recharger les données depuis T2.txt


mais ou dois je mette cette ligne de programme??
dans un fichier php en brut comme ca?
a t'on quand même besoin de COM et si oui ou l'active t'on ce COM?
je suis débutant et la manipulation a l'air costaud (hormis cette commande) de plus je ne veux rien faire de bien compliqué si ce n'est envoyé des données d'une table vers excel
d'ailleurs je ne vois pas comment on fait avec ceci pour chopper une donnée dasn une table et aller la mettre dans une case excel?
n'y a t'il pas plus simple que toutes ces lignes de codes?
MERCI

Eléphant du PHP | 148 Messages

28 juil. 2005, 10:56

oui quand je dis toutes ces lignes de codes je parle des fichiers que j'ai vu sur COM

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

28 juil. 2005, 10:56

J'avoue ne pas avoir lu ta solution en détail, mais l'objet COM est disponible dès que tu es sur une plateforme Win32 (windows) et est très simple d'utilisation

Après, plutôt que te faire un speech entier sur le COM, je te conseille d'utiliser :google: et de taper un truc du genre "PHP COM Excel" et tu devrais trouver des exemples

Mais, en résumé, l'objet COM te permet de créer un objet qui pointe, entre autre, sur une application Excel et avec lequel tu peut :
- créer des feuilles
- ajouter/modifier/supprimer des colonnes/lignes
- ajouter/modifier/supprimer des valeurs
- lancer des macros

Je sais pas ce que tu en pense mais ça parrait plus simple que de créer un fichier sql vers un fichier csv puis le convertir en feuille .xls, non ?
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 148 Messages

28 juil. 2005, 11:08

oui je vais essayer de trouver des exemples
mais pour les macros j'ai toujours vu ca partout sur l'excel mais je sais pas a quoi ca sert ni ce que c'est mais je vais me renseigner
merci

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

28 juil. 2005, 11:13

les macros sont inutiles pour ce que tu veux faire, je voulais juste te montrer ce qu'il était possible de faire avec l'objet COM
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 148 Messages

28 juil. 2005, 11:43

sadjiro a lancé une réponse mais je ne comprend pas bien le but
en effet je veux pour voir envoyer des données d'une base dans n fichier excel et pas aller chercher les données d'une base depuis une base
je pense qu'il y a une différence non?
Sincérement les explications qu'ils fournissent partout ne sont vraiment pas claires à moins de bien maitriser
je n'arrrive pas à trouver des exemples tout con en quelques lignes sur comment envoyer une information contenu dans une base dans un fichier excel

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

28 juil. 2005, 11:52

Je vais aller te chercher un exemple

Sinon, l'idée, c'est que, depuis PHP, tu sélectionnes tes données depuis ta base de données, puis que tu les transmettent directement à une feuille Excel, sans passer par csv, extraction de données dans un fichier, importation de fichier csv

Sans dénigrer sadjiro, je trouve sa solution plus compliquée.

Mais je vais te donner ma solution et je te laisserais décider ce que TU trouve le plus simple

Voili
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 148 Messages

28 juil. 2005, 11:54

sinon j'ai trouvé ce genre de chose
est ce que je peux utiliser ca comme ca?
- carnet.sql : 
  
CREATE TABLE personne ( 
    nom varchar(255), 
    prenom varchar(255), 
    age int(2) 
) 
  
- carnetMysqlToXml.php : 
  
<?php 
/* 
* Penser à ouvrir une connexion vers la base mysql 
* Ecrire une requête ($q) pour récupérer les données de la table 
*/ 
  
$xml = '<?xml version="1.0" encoding="ISO-8859-1"?>'.'<carnet>'; 
        while ($row = mysql_fetch_array($q)) { 
            $xml .= '<personne>'; 
            $xml .= '<nom>'.$row['nom'].'</nom>'; 
            $xml .= '<prenom>'.$row['prenom'].'</prenom>'; 
            $xml .= '<age>'.$row['age'].'</age>'; 
            $xml .= '</personne>'; 
        } 
        $xml .= '</carnet>'; 
         
        $fp = fopen("carnetMysqlToXml.xml", 'w+'); 
        fputs($fp, $xml); 
        fclose($fp); 
         
        echo 'Export XML effectue !<br><a href="carnetMysqlToXml.xml">Voir le fichier</a>'; 


Eléphant du PHP | 148 Messages

28 juil. 2005, 12:02

j'ai trouvé d'autre chose aussi avec des headers
dont un qui a l'aire vraiment bien mais je ne sais pas ou les mettres ni comment ca s'utilise
voila la source:
header("Content-type: application/vnd.ms-excel");

et pour l'affichage des données dans excel c'est tres simple
<table> <tr>....<td>les balises de tableau quoi</td></tr></table>
et oui excel reconnais le html!!!

sinon:
<?

header("Content-Type: application/csv-tab-delimited-table");
header("Content-disposition: filename=resultat.csv");
//cette ligne donne les titres des colonnes
   $csv_output = "column 1,column2"; 
   $csv_output .= "\n"; 
   $result = mysql_query("select * from table"); //ta requete mySQL

   while($row = mysql_fetch_array($result)) { 
       $csv_output .= "$row[col1],$row[col2]\n";//cette ligne écrit dans le fichier excel tant qu'il y a 
//des résultats de requete
       } 

      print $csv_output;
   exit;  
?>


Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

28 juil. 2005, 12:06

Tiens, voilà un exemple qui interroge une BdD MySQL et qui met le contenu de la 1ere colonne dans une feuille EXCEL et ce entierement depuis PHP
<?
$conn=mysql_connect('votre_hôte','utilisateur','mdp') or die('Probleme lors de la connexion a la BD MYSQL');
mysql_select_db('phpexcel',$conn) or die('Problème lors de la sélection de la BD MYSQL');//Sélection de la DB "phpexcel"
$query="SELECT *  FROM APPELS"; //Requête
$res=mysql_query($query) or die('Problème lors de la réception des enregistrements '.$query);//Exécution de la requête

	$excel=new COM("Excel.application"); //Instanciation de l'objet COM
	$excel->Workbooks->Add();//Ajout d'un classeur
	$book=$excel->Workbooks(1);//$book contient le classeur actif
	$sheet=$book->Worksheets(1);//$sheet contient la feuille active
	$sheet->Name="Rapport appel des clients";//Attribution d'un nom à la feuille
    $ligne = 1; // variable permettant d'incrémenter sur les lignes
    while($row=mysql_fetch_array($res)){//Parcours du résultat de la requête
        $cell=$sheet->Range('A') //On sélectionne la colonne A de la feuille
        $cell->value=$row[0];//Attribution d'une valeur à la cellule
	}

$book->saveas(nom_fichier.xls);//Sauvegarde du fichier
unset($sheet);//Libération de $sheet
unset($book);//Libération de $book
$excel->Workbooks->Close();//Fermeture du classeur
$excel->Quit();//On quitte Excel
unset($excel);//Libération de l'instance $excel
?>
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

28 juil. 2005, 12:08

Ce que tu viens de me donner fonctionne, mais pour exporter en csv ...

Je te donne la solution qui te permet de créer et de remplir directement ta feuille xls

Après, si tu tiens ABSOLUMENT à passer par une feuille csv, je te conseille de faire une requete SQL "SELECT INTO OUTFILE"
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 148 Messages

28 juil. 2005, 13:10

tout d'abord merci de bien vouloir m'aider
je vais utiliser ton code, j'ai remplacé par mes données (nom, mdp,base table)
mais il détecte une ereur ligne 15 je te l'ai indiqué et je sais pas ce qui cloche vu que je connais pas toutes ces manips
mais uune question plus importante est celle ci:
ou dois je mettre ce code ?? Dans une page séparée que j'appelle ensuite? Ou bien danS une page spécifique de mon code?

<? 
$conn=mysql_connect('localhost','adminCava','mdpAdmin') or die('Probleme lors de la connexion a la BD MYSQL'); 
mysql_select_db('cava',$conn) or die('Problème lors de la sélection de la BD MYSQL');//Sélection de la DB "phpexcel" 
$query="SELECT *  FROM Formulaire"; //Requête 
$res=mysql_query($query) or die('Problème lors de la réception des enregistrements '.$query);//Exécution de la requête 

    $excel=new COM("Excel.application"); //Instanciation de l'objet COM 
    $excel->Workbooks->Add();//Ajout d'un classeur 
    $book=$excel->Workbooks(1);//$book contient le classeur actif 
    $sheet=$book->Worksheets(1);//$sheet contient la feuille active 
    $sheet->Name="Rapport appel des clients";//Attribution d'un nom à la feuille 
    $ligne = 1; // variable permettant d'incrémenter sur les lignes 
    while($row=mysql_fetch_array($res)){//Parcours du résultat de la requête 
        $cell=$sheet->Range('A') //On sélectionne la colonne A de la feuille 
        $cell->value=$row[0];//Attribution d'une valeur à la cellule   il voit une erreur ici
    } 

$book->saveas(nom_fichier.xls);//Sauvegarde du fichier 
unset($sheet);//Libération de $sheet 
unset($book);//Libération de $book 
$excel->Workbooks->Close();//Fermeture du classeur 
$excel->Quit();//On quitte Excel 
unset($excel);//Libération de l'instance $excel 
?> 
MERCI

Eléphant du PHP | 148 Messages

28 juil. 2005, 13:16

bon ok l'erreur etait le ; mais j'avais pas vu au dessus dsl
par contre ca ne passe pas avec apache ca me lance un message d'erreur et me dit qu'apache va etre fermer? Vous savez d'ou ca eut venir?