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

Langage PHP Discussion :

Exporter Résultat requete vers Excel


Sujet :

Langage PHP

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    386
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 386
    Points : 275
    Points
    275
    Par défaut Exporter Résultat requete vers Excel
    Bonjour tout le monde!
    Voila j'essai depuis ce matin d'exporter le resultat d"une requete vers un fichier excel. J'ai essayé avec les header, avec com avec writeexcel mais sans succes. Le moyen le plus simple me parait être avec header mais au lieu de m'ouvrir un fichier excel il m'affiche directement le resultat dans une page internet explorer. J'ai pris un code que j'ai trouvé sur un autre topic :
    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
    <?php 
    header("Content-type: application/vnd.ms-excel"); 
    header("Content-Disposition: inline; filename=yourfilename.xls"); header("Pragma: no-cache"); 
    header("Expires: 0");  
     
    $name="pippo"; 
    $email="aaaaa@blue.ch";   
    $age="44"; 
    $data = '<table>';
    $data .= '<tr style="background:black; color:white; font-weight:bold">';
    $data .= '<td>Name</td><td>Email</td><td>Age</td><td>Location</td></tr>';
    $data .= '<tr><td>'. $name . '</td><td>' . $email . '</td><td>' . $age . '</td><td>' . $location . '</td></tr>';
    $data .= '</table>';
     
    echo $data;
     
    ?>
    Quelqu'un peut me dire ce qu'il manque pour afficher les info dans un document excel plutot qu'internet explorer? merci à vous

  2. #2
    Membre confirmé Avatar de mathieugamin
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    572
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 572
    Points : 627
    Points
    627
    Par défaut
    Salut,
    Tu veux que ton fichier soit directement ouvert par excel (excel s'ouvre automatiquement et affiche le résultat) ou tu veux écrire un fichier que tu puisses ouvrir ensuite avec Excel?

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    386
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 386
    Points : 275
    Points
    275
    Par défaut
    j'aimerai qu'il s'ouvre directement, ça serai l'idéal mais bon au pire je me contenterai de créer un fichier

  4. #4
    Membre confirmé Avatar de mathieugamin
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    572
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 572
    Points : 627
    Points
    627
    Par défaut
    Pour créer un fichier, voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $sql = mysql_query("SELECT * FROM table ORDER BY id ASC");
    	$f = fopen('fichier.csv', 'a');
    		while($res = mysql_fetch_object($sql)){
    		fwrite($f, $res->truc.";".date('d/m/Y', $res->date).";".$res->autretruc.";\n");
    	}
    	fclose($f);
    	echo 'L\'écriture est terminée !<br>';
    Teste-le et dis-moi si c'est ce que tu attendais...

    A+

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    386
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 386
    Points : 275
    Points
    275
    Par défaut
    pas exactement, en fait là ça me met tout dans la même cellule, il faudrai que chaque champs soit dans une colonne

  6. #6
    Membre confirmé Avatar de mathieugamin
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    572
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 572
    Points : 627
    Points
    627
    Par défaut
    Vérifie ton code car chez moi tout fonctionne...
    Chacun des champs est séparé par un point-virgule, interprété par Excel comme une nouvelle colonne.
    Tu as bien laissé les point-virgules dans fwrite() ?

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    386
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 386
    Points : 275
    Points
    275
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?php
    include("co.php");
    $connect=mysql_connect($host, $user , $pwd) OR DIE("Connexion impossible au serveur de données");
    mysql_select_db($bdd) or die( "Connexion impossible à la base de donnée");
    $sql = mysql_query("SELECT nomintervenant, numintervenant FROM intervenant");
    	$f = fopen('export.xls', 'a');
    		while($res = mysql_fetch_object($sql)){
    		fwrite($f, $res->numintervenant.";".$res->nomintervenant."\n");
    	}
    	fclose($f);
    	echo 'L\'écriture est terminée !<br>';
    ?>
    Voila mon code

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    386
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 386
    Points : 275
    Points
    275
    Par défaut
    Peronne n'a d'explication pour la technique avec les headers?

  9. #9
    Membre confirmé Avatar de mathieugamin
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    572
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 572
    Points : 627
    Points
    627
    Par défaut
    Il te manque un point-virgule avant ton changement de ligne:
    .$res->nomintervenant.";\n")
    Ca doit fonctionner maintenant.

    Pour les headers, désolé, c'est pas encore mon point fort !

  10. #10
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
             header('Content-Type: '.$mimetype.'; name="'.$file.'"');
             header('Content-Transfer-Encoding: binary');
             header('Content-Disposition: attachment; filename="'.$file.'"');
    j'utilise ça pour toute mes extraction quelque soit le type de fichier

    pour excel j'envoie au client des fichier xmlxls dont le mime/type est simplement $mimetype = 'text/xml'; et
    $file = 'monfichier.xls'; ou
    $file = 'monfichier.xmlxls';

    il suffit donc de mettre le bon mime/type mais il ne faut pas confondre ce que tu réponds et ce qu'en fait le client

    ce n'est pas toi développeur qui défini comment est interprété la réponse.
    quoi qu'il arrive quelque soit le header c'est le client qui décide

    certains clients privilégient le mime/type à l'extension du fichier d'autres (IE) c'est le contraire mais ni l'extension ni le mime/type te disent comment le client traite la chose.

    il peut l'ouvrir directement si le navigateur est compatible, l'ouvrir avec un plugin, l'ouvrir avec l'application correspondante, proposer l'ouverture ou l'enregistrement, l'enregistrer. ce n'est pas toi qui peux décider ce qui sera fait mais c'est la conf client.

    il est tentant de mettre dans le header un mime/type inconnu genre force/download mais dans ce cas là non plus le téléchargement n'est pas garanti. de plus le poste client risque de perdre le type du fichier et ne pas le comprendre.

    enfin le nom du fichier transmis par le header est une proposition le client n'est pas tenu de s'en servir.

    A+JYT

  11. #11
    Membre actif
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    386
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 386
    Points : 275
    Points
    275
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    include("co.php");
    $connect=mysql_connect($host, $user , $pwd) OR DIE("Connexion impossible au serveur de données");
    mysql_select_db($bdd) or die( "Connexion impossible à la base de donnée");
    $sql = mysql_query("SELECT nomintervenant, numintervenant FROM intervenant");
    	$f = fopen('export.xls', 'a');
    		while($res = mysql_fetch_object($sql)){
    		fwrite($f, $res->numintervenant.";".$res->nomintervenant.";\n");
    	}
    	fclose($f);
    	echo 'L\'écriture est terminée !<br>';
    J'ai rajouté la virgule mais toujours le meme probleme!

  12. #12
    Membre confirmé Avatar de mathieugamin
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    572
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 572
    Points : 627
    Points
    627
    Par défaut
    Ton problème se situe dans l'extension du fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $f = fopen('export.xls', 'a')
    C'est un fichier .csv qui prend en compte ces délimitateurs.

    Le format .xls est spécifique et ne fonctionnera pas avec le code que je t'ai donné (je crois que ce n'est pas compatible).

    Essaie de modifier le nom avec .csv comme extension et tout ira bien...

  13. #13
    Membre actif
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    386
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 386
    Points : 275
    Points
    275
    Par défaut
    super merci bcp ^^ et pour l'ouvrir en suivant tu as une idée?

  14. #14
    Membre confirmé Avatar de mathieugamin
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    572
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 572
    Points : 627
    Points
    627
    Par défaut
    Désolé, aucune !
    Je te l'aurais donnée de suite sinon...
    Si tu trouves, ça m'intéresse aussi !

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2005
    Messages : 40
    Points : 48
    Points
    48
    Par défaut export excel
    J'ai un bout de code que j'utilise pour créer des fichiers excel qui s'ouvrent dans IE. Par contre, je crée ce fichier xls dans un répertoire temporaire avant de l'ouvrir dans IE, mais ce n'est peut être pas nécessaire.

    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
     
    $date = date("YmdHis", mktime());
    $filename = "../_commun/temp/" . $logon_user . "_" . $date;
    $sheetname = $logon_user . "_" . $date;
    $fp = fopen($filename . ".xls", "a");
     
    //--- un peu de xml pour la mise en page (orientation, figer les volets)
    fwrite($fp, "
    <html xmlns:o=\"urn:schemas-microsoft-com:office:office\"
    xmlns:x=\"urn:schemas-microsoft-com:office:excel\"
    xmlns=\"http://www.w3.org/TR/REC-html40\">
    <head>
    <meta http-equiv=Content-Type content=\"text/html; charset=windows-1252\">
    <meta name=ProgId content=Excel.Sheet>
    <meta name=Generator content='" . $app_name . "'>
    <style>
    <!--table
    	{mso-displayed-decimal-separator:\"\,\";
    	mso-displayed-thousand-separator:\" \";}
    @page
    	{margin:.39in .39in .39in .39in;
    	mso-header-margin:.39in;
    	mso-footer-margin:.39in;
    	mso-page-orientation:landscape;}
    -->
    </style>
    <!--[if gte mso 9]><xml>
     <x:ExcelWorkbook>
      <x:ExcelWorksheets>
       <x:ExcelWorksheet>
        <x:Name>" . $sheetname . "</x:Name>
        <x:WorksheetOptions>
         <x:DefaultColWidth>10</x:DefaultColWidth>
         <x:Print>
          <x:ValidPrinterInfo/>
          <x:PaperSizeIndex>9</x:PaperSizeIndex>
          <x:HorizontalResolution>600</x:HorizontalResolution>
          <x:VerticalResolution>600</x:VerticalResolution>
         </x:Print>
         <x:Selected/>
         <x:DoNotDisplayGridlines/>
         <x:FreezePanes/>
         <x:FrozenNoSplit/>
         <x:SplitHorizontal>1</x:SplitHorizontal>
         <x:TopRowBottomPane>1</x:TopRowBottomPane>
         <x:SplitVertical>1</x:SplitVertical>
         <x:LeftColumnRightPane>1</x:LeftColumnRightPane>
         <x:ActivePane>0</x:ActivePane>
         <x:ProtectContents>False</x:ProtectContents>
         <x:ProtectObjects>False</x:ProtectObjects>
         <x:ProtectScenarios>False</x:ProtectScenarios>
        </x:WorksheetOptions>
       </x:ExcelWorksheet>
      </x:ExcelWorksheets>
      <x:WindowHeight>9780</x:WindowHeight>
      <x:WindowWidth>15240</x:WindowWidth>
      <x:WindowTopX>0</x:WindowTopX>
      <x:WindowTopY>1230</x:WindowTopY>
      <x:ProtectStructure>False</x:ProtectStructure>
      <x:ProtectWindows>False</x:ProtectWindows>
     </x:ExcelWorkbook>
    </xml><![endif]-->
    </head>
    <body link=blue vlink=purple>
       ");
    puis un tableau <table>.....</table>
    et enfin
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    echo "<script>$n";
    echo "  window.open('http:" . $filename . ".xls','','left=0,top=0,width=screen.width,height=screen.height,resizable,scrollbars=1,menubar=1,toolbar=1,location=0,status=0');$n";
    echo "  history.back();$n";
    echo "</script>$n";

Discussions similaires

  1. export résultat requete vers fichier fic
    Par melekhb dans le forum HyperFileSQL
    Réponses: 2
    Dernier message: 05/07/2010, 19h05
  2. exporter une requete vers excel
    Par tzinzin dans le forum VBA Access
    Réponses: 3
    Dernier message: 02/11/2007, 16h08
  3. exporter un requete vers excel
    Par chamus dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 12/02/2007, 17h10
  4. Exportation résultat requete dans Excel
    Par aures64 dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 10/11/2006, 13h43
  5. export de requete vers excel(pb de mise en forme)
    Par syl221 dans le forum Access
    Réponses: 13
    Dernier message: 20/10/2004, 15h15

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