Génération d’un fichier Excel (.xlsx) en PHP avec PHPExcel

PHPExcel est une bibliothèque pré-programmée permettant de générer un fichier Excel (.xslx) à l'aide de PHP.

▼Publicité

Téléchargement

Cette bibliothèque est disponible à l'adresse suivante : http://phpexcel.codeplex.com/

Documentation

Pour utiliser PHPExcel, prenez connaissance de la documentation et des tutoriels suivants :

Utilisation

Mise à jour

À la suite des nombreuses questions qui m'ont été posées sur phpExcel, j'ai ajusté l'extrait de code pour illustrer une technique permettant de générer le chiffrier Excel après avoir affiché les données à l'écran.

Voici un exemple de programme PHP qui génère un chiffrier Excel à l'aide de PHPExcel.

Important : pour que la génération du chiffrier fonctionne correctement, il ne doit y avoir aucune information envoyée au navigateur (ex : aucune balise HTML, aucune ligne blanche en dehors du code PHP) ni avant, ni après la génération proprement dite. 

Une structure de code intéressante consiste à afficher les données à l'écran et de les faire suivre d'un bouton qui, lui, se chargera de générer le chiffrier Excel. Les balises HTML ne seront envoyées à l'écran que si le bouton n'a pas été cliqué.

PHP

// référence à la bibliothèque de fonctions

require_once 'include/PHPExcel/PHPExcel.php';

require_once 'include/PHPExcel/PHPExcel/IOFactory.php';

 

if(isset($_POST['excel'])) {

    // création des objets de base et initialisation des informations d'entête

    $classeur = new PHPExcel;

    $classeur->getProperties()->setCreator("Annie Gagnon");

    $classeur->setActiveSheetIndex(0);

    $feuille=$classeur->getActiveSheet();

 

    // ajout des données dans la feuille de calcul

    $feuille->setTitle('Nom affiché dans l\'onglet');

    $feuille->setCellValueByColumnAndRow(0, 1, 'Les colonnes débutent à 0 et les lignes débutent à 1');

    $feuille->SetCellValue('A2', 'Il est aussi possible d\'utiliser la notation LettreChiffre (ex : A2)');

 

    // envoi du fichier au navigateur

    header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); 

    header('Content-Disposition: attachment;filename="nomfichier.xlsx"'); 

    header('Cache-Control: max-age=0'); 

    $writer = PHPExcel_IOFactory::createWriter($classeur, 'Excel2007'); 

    $writer->save('php://output');

}

else {

    // on envoie de l'information à l'écran seulement si le bouton de génération n'a pas été cliqué

    require 'include/entete.inc.php';

 

    // affichage des données à l'écran

    ...

 

    // bouton qui permettra de générer le chiffrier Excel

    echo '<form method="post" action="' . $_SERVER['SCRIPT_NAME'] . '">';

    echo '<input type="submit" value="Exporter vers Excel" name="excel" />';

    echo '</form>';

}

La structure de code proposée ici commencera par afficher les données à l'écran. Lorsque l'usager cliquera sur le bouton pour exporter les données vers Excel, la page demeurera affichée et le fichier généré sera téléchargé sur le poste du client.

Fichier téléchargé sur le client

Ce programme générera le chiffrier suivant :

Exemple de fichier généré avec PHPExcel

Consultez l'article « Dépannage PHPExcel » pour obtenir de l'aide sur cette merveilleuse bibliothèque !

PHPExcel peut également être utilisé dans WordPress. Voyez comment dans l'article « Utiliser PHPExcel dans un « shortcode » ».

Merci de partager ! Share on FacebookTweet about this on TwitterShare on Google+Share on LinkedInPin on PinterestShare on StumbleUponEmail this to someone
Catégories

11 commentaires

  1. ghizlane

    bonjour,
    s’il vous plait, je veux générer un fichier Excel, et je veux le remplir par des données d’un tableau.mais j’ai un prbleme de remplissage du fichier , voila mon code

    $pdl = array();
    for($k=0;$ksetCellValue(‘A’.$IndexLigne, $pdl[‘nom’]);
    $feuille->setCellValue(‘B’.$IndexLigne, $pdl[‘etage’]);
    $feuille->setCellValue(‘C’.$IndexLigne, $pdl[‘matricule’]);
    $feuille->setCellValue(‘D’.$IndexLigne, $pdl[‘commune’]);
    $feuille->setCellValue(‘E’.$IndexLigne, $pdl[‘pdl’]);
    $feuille->setCellValue(‘F’.$IndexLigne, $pdl[‘gestionnaire’]);
    $feuille->setCellValue(‘G’.$IndexLigne, $pdl[‘date_resiliation’]);
    $feuille->setCellValue(‘H’.$IndexLigne, $pdl[‘semaine_libre’]);
    $feuille->setCellValue(‘I’.$IndexLigne, $pdl[‘situation_compteur’]);
    $feuille->setCellValue(‘J’.$IndexColumn,$IndexLigne, $pdl[‘tel’]);
    $feuille->setCellValue(‘K’.$IndexColumn,$IndexLigne, $pdl[‘mail’]);
    }
    }

    et voila l’erreur:

    Fatal error: Uncaught exception ‘PHPExcel_Exception’ with message ‘Invalid cell coordinate AM FOURTIER BENOIT’ in
    C:\Users\ghizlane\Desktop\xamp\htdocs\Gestion_Bailleur\Bibliotheque\PHPExcel\Classes\PHPExcel\Cell.php:558 Stack trace: #0
    C:\Users\ghizlane\Desktop\xamp\htdocs\Gestion_Bailleur\Bibliotheque\PHPExcel\Classes\PHPExcel\Worksheet.php(1227): PHPExcel_Cell::coordinateFromString(‘AM FOURTIER BEN…’) #1
    C:\Users\ghizlane\Desktop\xamp\htdocs\Gestion_Bailleur\Bibliotheque\PHPExcel\Classes\PHPExcel\Worksheet.php(1186): PHPExcel_Worksheet->_createNewCell(‘AM FOURTIER BEN…’) #2
    C:\Users\ghizlane\Desktop\xamp\htdocs\Gestion_Bailleur\Bibliotheque\PHPExcel\Classes\PHPExcel\Worksheet.php(1095): PHPExcel_Worksheet->getCell(‘AM FOURTIER BEN…’) #3
    C:\Users\ghizlane\Desktop\xamp\htdocs\Gestion_Bailleur\Controllers\Rechercher.php(91): PHPExcel_Worksheet->setCellValue(‘AM FOURTIER BEN…’, ‘M FOURTIER BENO…’) #4 {main} thrown in
    C:\Users\ghizlane\Desktop\xamp\htdocs\Gestion_Bailleur\Bibliotheque\PHPExcel\Classes\PHPExcel\Cell.php on line 558

    « merci d’avance »

    • Christiane Lagacé

      Bonjour ghizlane,

      Il semble y avoir eu un problème lorsque vous avez collé votre code dans la zone de commentaire. L’extrait est incohérent. De plus, il est incomplet. Je ne peux voir d’où $IndexLigne tire sa valeur.

      Je suppose que le problème vient justement de la valeur donnée à $IndexLigne puisque l’erreur dit que « AM FOURTIER BENOIT » n’est pas une adresse valide. C’est comme si la variable $IndexLigne contenait la valeur « M FOURTIER BENOIT ».

      Aussi, votre code semble problématique rendu à la colonne J puisque vous utilisez désormais un index de colonne plutôt qu’un index de ligne. Mais peut-être que c’est dû aux problèmes rencontrés lorsque vous avez collé votre code ici.

      Bonne chance !

      Christiane

  2. ghizlane

    Bonjour,
    merci beaucoup pour votre attention,
    pour $IndexLigne c’est un index pour parcourir les ligne du fichier, et c vrai j’ai commis une erreur quand je voulais collé le code dans le commentaire

    for($IndexLigne=2;$IndexLignesetCellValue(‘A’.$IndexLigne, $nom2);
    $feuille->setCellValue(‘B’.$IndexLigne, $rue2);
    $feuille->setCellValue(‘C’.$IndexLigne, $etage2);
    $feuille->setCellValue(‘D’.$IndexLigne, $matricule2);
    $feuille->setCellValue(‘E’.$IndexLigne, $commune2);
    $feuille->setCellValue(‘F’.$IndexLigne, $pdl3);
    $feuille->setCellValue(‘G’.$IndexLigne, $gestionnaire2);
    $feuille->setCellValue(‘H’.$IndexLigne, $date_resiliation2);
    $feuille->setCellValue(‘I’.$IndexLigne, 11);
    $feuille->setCellValue(‘J’.$IndexLigne, $situation_compteur2);
    $feuille->setCellValue(‘K’.$IndexLigne, $tel2);
    $feuille->setCellValue(‘L’.$IndexLigne, $mail2);
    }

    • ghizlane

      for($IndexLigne=2;$IndexLignesetCellValue(‘A’.$IndexLigne, $nom2);
      $feuille->setCellValue(‘B’.$IndexLigne, $rue2);
      $feuille->setCellValue(‘C’.$IndexLigne, $etage2);
      $feuille->setCellValue(‘D’.$IndexLigne, $matricule2);
      $feuille->setCellValue(‘E’.$IndexLigne, $commune2);
      $feuille->setCellValue(‘F’.$IndexLigne, $pdl3);
      $feuille->setCellValue(‘G’.$IndexLigne, $gestionnaire2);
      $feuille->setCellValue(‘H’.$IndexLigne, $date_resiliation2);
      $feuille->setCellValue(‘I’.$IndexLigne, 11);
      $feuille->setCellValue(‘J’.$IndexLigne, $situation_compteur2);
      $feuille->setCellValue(‘K’.$IndexLigne, $tel2);
      $feuille->setCellValue(‘L’.$IndexLigne, $mail2);
      }

      • ghizlane

        for($IndexLigne=2;$IndexLignesetCellValue(‘A’.$IndexLigne, $nom2);
        $feuille->setCellValue(‘B’.$IndexLigne, $rue2);
        $feuille->setCellValue(‘C’.$IndexLigne, $etage2);
        $feuille->setCellValue(‘D’.$IndexLigne, $matricule2);
        $feuille->setCellValue(‘E’.$IndexLigne, $commune2);
        $feuille->setCellValue(‘F’.$IndexLigne, $pdl3);
        $feuille->setCellValue(‘G’.$IndexLigne, $gestionnaire2);
        $feuille->setCellValue(‘H’.$IndexLigne, $date_resiliation2);
        $feuille->setCellValue(‘I’.$IndexLigne, 11);
        $feuille->setCellValue(‘J’.$IndexLigne, $situation_compteur2);
        $feuille->setCellValue(‘K’.$IndexLigne, $tel2);
        $feuille->setCellValue(‘L’.$IndexLigne, $mail2);

        }

        • Christiane Lagacé

          Je n’ai malheureusement pas assez de matériel pour vous aider… Écrivez-moi en privé avec le code complet et je verrai ce que je peux faire.

  3. fache fabien

    Bonjour,

    j’ai un petit soucis avec ExcelPHP.
    J’ai découpé mon code en sous parti que j’assemble au fur est à mesure.
    Je n’arrive pas à afficher le tableau Excel directement dans le formulaire de résultats.
    Le but serait d’avoir comme vous un affichage de ce tableau dans FormResultat.
    Néanmoins il me demande de sauvegarder le fichier en tant que page php.
    Si j’enregistre le fichier il y a une portion de code html qui est là pour rien.
    Je passe d’abord par un formulaire de saisi par une methode poste qui selection la requête correspondante et redirige vers resultat.php.
    Auriez vous une idée?

    Merci.

    http://paste.awesom.eu/mRis&ln

    • Christiane Lagacé

      Bonjour,

      Si le fichier téléchargé contient du code html, c’est que vous avez fait un ou plusieurs echo avant de débuter la génération du fichier Excel. Dans votre fichier Resultat.php, on voit que vous générez des balises HTML puis vous faites appel à FormResultat.php qui finit par appeler la fonction excelCreate.

      Je vous suggère plutôt de travailler en deux temps : vous générez d’abord les données à l’écran et vous ajoutez au bas du tableau un bouton qui permettra de télécharger le fichier Excel. Ainsi, la fonction excelCreate ne sera appelée que sur le post du formulaire contenant le bouton de génération. Vous devez structurer votre code pour que le doctype, le head et le body ne soient générés que lorsque le bouton de génération n’est pas cliqué.

      La structure de code ressemblera à ceci :

      if(isset($_POST[‘generer’])) {
      // génération du fichier Excel
      $classeur = new PHPExcel;

      }
      else {
      // affichage des données à l’écran
      echo ‘< !DOCTYPE>‘;
      echo ‘‘;

      }

  4. Mathieu

    Voici mon problème. Je crée une database et j’affiche les champs voulu dans un tableau directement sur la page. Mais quand je veux rentrer mon tableau dans Excel via PHP, je n’obtient que le titre et les titres des colonnes. Je ne sais si le problème vient de mes conditions, du placement du module a l’intérieure du script. Je bloque. Je viens d’y passer toute la nuit mais pas moyen de trouver l’erreur.

    Merci d’avance pour votre aide.

    Mathieu

    http://pastebin.com/gLDyAFhS

    Resultat SQL

    PDO::ERRMODE_EXCEPTION);
    $i = 0;
    $test_pdo = 0;
    $k = 0;
    $j = 1;
    $l = 0;

    $strId = « Id »;
    $strNom = « Nom »;
    $strPrenom = « Prenom »;
    $strAge = « Age »;
    $strAbo = « Abo »;
    $strEmail = « E-mail »;
    $strVille = « Ville »;
    $strAchats = « Achats »;
    $strTotal = « Total »;

    $id = FALSE;
    $nom = FALSE;
    $prenom = FALSE;
    $age = FALSE;
    $abo = FALSE;
    $email = FALSE;
    $ville = FALSE;
    $achats = FALSE;
    $total = FALSE;

    // On recupere les variables envoyees via le formulaire
    $requete = $_POST[‘requete’];
    $titre = $_POST[‘titre’];

    // Connection a la db et test d’erreur
    try
    {
    $bdd = new PDO(‘mysql:host=localhost;dbname=test;charset=utf8’, ‘root’,  », $pdo_option);
    }
    catch (Exception $e)
    {
    die(« Erreur :  » . $e->getMessage());
    }

    // On recupere la requete entree et on lance le travail
    $reponse = $bdd->query($requete);

    if($pdo_option){
    $test_pdo = 0;
    }
    else{
    $test_pdo = 1;
    }

    if(preg_match(‘`id`’, $requete) OR preg_match(‘`[*]`’, $requete))
    $id = TRUE;
    if(preg_match(‘{`nom`}’, $requete) OR preg_match(‘`[*]`’, $requete))
    $nom = TRUE;
    if(preg_match(‘`prenom`’, $requete) OR preg_match(‘`[*]`’, $requete))
    $prenom = TRUE;
    if(preg_match(‘`age`’, $requete) OR preg_match(‘`[*]`’, $requete))
    $age = TRUE;
    if(preg_match(‘`abo`’, $requete) OR preg_match(‘`[*]`’, $requete))
    $abo = TRUE;
    if(preg_match(‘`email`’, $requete) OR preg_match(‘`[*]`’, $requete))
    $email = TRUE;
    if(preg_match(‘`ville`’, $requete) OR preg_match(‘`[*]`’, $requete))
    $ville = TRUE;
    if(preg_match(‘`achats`’, $requete) OR preg_match(‘`[*]`’, $requete))
    $achats = TRUE;
    if(preg_match(‘`total`’, $requete) OR preg_match(‘`[*]`’, $requete))
    $total = TRUE;

    ?>

    <?php
    if($id == TRUE)
    echo '’ . $strId .  »;
    if($nom == TRUE)
    echo  » . $strNom .  »;
    if($prenom == TRUE)
    echo  » . $strPrenom .  »;
    if($age == TRUE)
    echo  » . $strAge .  »;
    if($abo == TRUE)
    echo  » . $strAbo .  »;
    if($email == TRUE)
    echo  » . $strEmail .  »;
    if($ville == TRUE)
    echo  » . $strVille .  »;
    if($achats == TRUE)
    echo  » . $strAchats .  »;
    if($total == TRUE)
    echo  » . $strTotal .  »;
    ?>

    fetch())
    {
    ?>

    <?php
    if($id == TRUE)
    echo '’ . $donnees[‘id’] .  »;
    if($nom == TRUE)
    echo  » . $donnees[‘nom’] .  »;
    if($prenom == TRUE)
    echo  » . $donnees[‘prenom’] .  »;
    if($age == TRUE)
    echo  » . $donnees[‘age’] .  »;
    if($abo == TRUE)
    echo  » . $donnees[‘abo’] .  »;
    if($email == TRUE)
    echo  » . $donnees[’email’] .  »;
    if($ville == TRUE)
    echo  » . $donnees[‘ville’] .  »;
    if($achats == TRUE)
    echo  » . $donnees[‘achats’] .  »;
    if($total == TRUE)
    echo  » . $donnees[‘total’] . ‘ €’;
    ?>

    closeCursor();
    ?>

    <?php
    echo 'Il y a ' . $i . ' entrées correspondantes a vos critères. ‘;
    echo ‘Requéte SQL saisie : ‘ . $requete;
    ?>

    getActiveSheet();
    $worksheet->setActiveSheetIndex(0);
    $sheet=$worksheet->getActiveSheet();

    $sheet->setCellValueByColumnAndRow($k, $j, $titre);
    $j = 3;

    if($id == TRUE){
    $sheet->setCellValueByColumnAndRow($k, $j, $strId);
    $k++;
    }
    if($nom == TRUE){
    $sheet->setCellValueByColumnAndRow($k, $j, $strNom);
    $k++;
    }
    if($prenom == TRUE){
    $sheet->setCellValueByColumnAndRow($k, $j, $strPrenom);
    $k++;
    }
    if($age == TRUE){
    $sheet->setCellValueByColumnAndRow($k, $j, $strAge);
    $k++;
    }
    if($abo == TRUE){
    $sheet->setCellValueByColumnAndRow($k, $j, $strAbo);
    $k++;
    }
    if($email == TRUE){
    $sheet->setCellValueByColumnAndRow($k, $j, $strEmail);
    $k++;
    }
    if($ville == TRUE){
    $sheet->setCellValueByColumnAndRow($k, $j, $strVille);
    $k++;
    }
    if($achats == TRUE){
    $sheet->setCellValueByColumnAndRow($k, $j, $strAchats);
    $k++;
    }
    if($total == TRUE){
    $sheet->setCellValueByColumnAndRow($k, $j, $strTotal);
    $k++;
    }

    $j = 1;
    $k++;

    do{
    if($id == TRUE){
    $sheet->setCellValueByColumnAndRow($k, $j, $donnees[‘id’]);
    $k++;
    }
    if($nom == TRUE){
    $sheet->setCellValueByColumnAndRow($k, $j, $donnees[‘nom’]);
    $k++;
    }
    if($prenom == TRUE){
    $sheet->setCellValueByColumnAndRow($k, $j, $donnees[‘prenom’]);
    $k++;
    }
    if($age == TRUE){
    $sheet->setCellValueByColumnAndRow($k, $j, $donnees[‘age’]);
    $k++;
    }
    if($abo == TRUE){
    $sheet->setCellValueByColumnAndRow($k, $j, $donnees[‘abo’]);
    $k++;
    }
    if($email == TRUE){
    $sheet->setCellValueByColumnAndRow($k, $j, $donnees[’email’]);
    $k++;
    }
    if($ville == TRUE){
    $sheet->setCellValueByColumnAndRow($k, $j, $donnees[‘ville’]);
    $k++;
    }
    if($achats == TRUE){
    $sheet->setCellValueByColumnAndRow($k, $j, $donnees[‘achats’]);
    $k++;
    }
    if($total == TRUE){
    $sheet->setCellValueByColumnAndRow($k, $j, $donnees[‘total’]);
    $k++;
    }
    $l++;
    $k++;
    $j = 1;

    }while($l save($records);

    $fp = fopen(‘historique_requetes.txt’, ‘a+’);
    $ligne = date(‘d/m/Y, H:i:s’) . ‘ -> ‘ . $requete . ‘ | TRUE = ‘ . $test_pdo;
    fputs($fp, $ligne);
    fputs($fp, « \r\n »);
    fclose($fp);
    ?>

    clone this paste RAW Paste Data

    Resultat SQL

    PDO::ERRMODE_EXCEPTION);
    $i = 0;
    $test_pdo = 0;
    $k = 0;
    $j = 1;
    $l = 0;

    $strId = « Id »;
    $strNom = « Nom »;
    $strPrenom = « Prenom »;
    $strAge = « Age »;
    $strAbo = « Abo »;
    $strEmail = « E-mail »;
    $strVille = « Ville »;
    $strAchats = « Achats »;
    $strTotal = « Total »;

    $id = FALSE;
    $nom = FALSE;
    $prenom = FALSE;
    $age = FALSE;
    $abo = FALSE;
    $email = FALSE;
    $ville = FALSE;
    $achats = FALSE;
    $total = FALSE;

    // On recupere les variables envoyees via le formulaire
    $requete = $_POST[‘requete’];
    $titre = $_POST[‘titre’];

    // Connection a la db et test d’erreur
    try
    {
    $bdd = new PDO(‘mysql:host=localhost;dbname=test;charset=utf8’, ‘root’,  », $pdo_option);
    }
    catch (Exception $e)
    {
    die(« Erreur :  » . $e->getMessage());
    }

    // On recupere la requete entree et on lance le travail
    $reponse = $bdd->query($requete);

    if($pdo_option){
    $test_pdo = 0;
    }
    else{
    $test_pdo = 1;
    }

    if(preg_match(‘`id`’, $requete) OR preg_match(‘`[*]`’, $requete))
    $id = TRUE;
    if(preg_match(‘{`nom`}’, $requete) OR preg_match(‘`[*]`’, $requete))
    $nom = TRUE;
    if(preg_match(‘`prenom`’, $requete) OR preg_match(‘`[*]`’, $requete))
    $prenom = TRUE;
    if(preg_match(‘`age`’, $requete) OR preg_match(‘`[*]`’, $requete))
    $age = TRUE;
    if(preg_match(‘`abo`’, $requete) OR preg_match(‘`[*]`’, $requete))
    $abo = TRUE;
    if(preg_match(‘`email`’, $requete) OR preg_match(‘`[*]`’, $requete))
    $email = TRUE;
    if(preg_match(‘`ville`’, $requete) OR preg_match(‘`[*]`’, $requete))
    $ville = TRUE;
    if(preg_match(‘`achats`’, $requete) OR preg_match(‘`[*]`’, $requete))
    $achats = TRUE;
    if(preg_match(‘`total`’, $requete) OR preg_match(‘`[*]`’, $requete))
    $total = TRUE;

    ?>

    <?php
    if($id == TRUE)
    echo '’ . $strId .  »;
    if($nom == TRUE)
    echo  » . $strNom .  »;
    if($prenom == TRUE)
    echo  » . $strPrenom .  »;
    if($age == TRUE)
    echo  » . $strAge .  »;
    if($abo == TRUE)
    echo  » . $strAbo .  »;
    if($email == TRUE)
    echo  » . $strEmail .  »;
    if($ville == TRUE)
    echo  » . $strVille .  »;
    if($achats == TRUE)
    echo  » . $strAchats .  »;
    if($total == TRUE)
    echo  » . $strTotal .  »;
    ?>

    fetch())
    {
    ?>

    <?php
    if($id == TRUE)
    echo '’ . $donnees[‘id’] .  »;
    if($nom == TRUE)
    echo  » . $donnees[‘nom’] .  »;
    if($prenom == TRUE)
    echo  » . $donnees[‘prenom’] .  »;
    if($age == TRUE)
    echo  » . $donnees[‘age’] .  »;
    if($abo == TRUE)
    echo  » . $donnees[‘abo’] .  »;
    if($email == TRUE)
    echo  » . $donnees[’email’] .  »;
    if($ville == TRUE)
    echo  » . $donnees[‘ville’] .  »;
    if($achats == TRUE)
    echo  » . $donnees[‘achats’] .  »;
    if($total == TRUE)
    echo  » . $donnees[‘total’] . ‘ €’;
    ?>

    closeCursor();
    ?>

    <?php
    echo 'Il y a ' . $i . ' entrées correspondantes a vos critères. ‘;
    echo ‘Requéte SQL saisie : ‘ . $requete;
    ?>

    getActiveSheet();
    $worksheet->setActiveSheetIndex(0);
    $sheet=$worksheet->getActiveSheet();

    $sheet->setCellValueByColumnAndRow($k, $j, $titre);
    $j = 3;

    if($id == TRUE){
    $sheet->setCellValueByColumnAndRow($k, $j, $strId);
    $k++;
    }
    if($nom == TRUE){
    $sheet->setCellValueByColumnAndRow($k, $j, $strNom);
    $k++;
    }
    if($prenom == TRUE){
    $sheet->setCellValueByColumnAndRow($k, $j, $strPrenom);
    $k++;
    }
    if($age == TRUE){
    $sheet->setCellValueByColumnAndRow($k, $j, $strAge);
    $k++;
    }
    if($abo == TRUE){
    $sheet->setCellValueByColumnAndRow($k, $j, $strAbo);
    $k++;
    }
    if($email == TRUE){
    $sheet->setCellValueByColumnAndRow($k, $j, $strEmail);
    $k++;
    }
    if($ville == TRUE){
    $sheet->setCellValueByColumnAndRow($k, $j, $strVille);
    $k++;
    }
    if($achats == TRUE){
    $sheet->setCellValueByColumnAndRow($k, $j, $strAchats);
    $k++;
    }
    if($total == TRUE){
    $sheet->setCellValueByColumnAndRow($k, $j, $strTotal);
    $k++;
    }

    $j = 1;
    $k++;

    do{
    if($id == TRUE){
    $sheet->setCellValueByColumnAndRow($k, $j, $donnees[‘id’]);
    $k++;
    }
    if($nom == TRUE){
    $sheet->setCellValueByColumnAndRow($k, $j, $donnees[‘nom’]);
    $k++;
    }
    if($prenom == TRUE){
    $sheet->setCellValueByColumnAndRow($k, $j, $donnees[‘prenom’]);
    $k++;
    }
    if($age == TRUE){
    $sheet->setCellValueByColumnAndRow($k, $j, $donnees[‘age’]);
    $k++;
    }
    if($abo == TRUE){
    $sheet->setCellValueByColumnAndRow($k, $j, $donnees[‘abo’]);
    $k++;
    }
    if($email == TRUE){
    $sheet->setCellValueByColumnAndRow($k, $j, $donnees[’email’]);
    $k++;
    }
    if($ville == TRUE){
    $sheet->setCellValueByColumnAndRow($k, $j, $donnees[‘ville’]);
    $k++;
    }
    if($achats == TRUE){
    $sheet->setCellValueByColumnAndRow($k, $j, $donnees[‘achats’]);
    $k++;
    }
    if($total == TRUE){
    $sheet->setCellValueByColumnAndRow($k, $j, $donnees[‘total’]);
    $k++;
    }
    $l++;
    $k++;
    $j = 1;

    }while($l save($records);

    $fp = fopen(‘historique_requetes.txt’, ‘a+’);
    $ligne = date(‘d/m/Y, H:i:s’) . ‘ -> ‘ . $requete . ‘ | TRUE = ‘ . $test_pdo;
    fputs($fp, $ligne);
    fputs($fp, « \r\n »);
    fclose($fp);
    ?>

    Pastebin.com Tools & Applications
    iPhone/iPad Windows Firefox Chrome WebOS Android Mac Opera Click.to UNIX WinPhone
    create new paste | api | trends | syntax languages | faq | tools | privacy | cookies | contact | dmca | advertise on pastebin | go pro
    Follow us: pastebin on facebook | pastebin on twitter | pastebin in the news
    Dedicated Server Hosting by Steadfast
    Pastebin v3.11 rendered in: 0.006 seconds

    Resultat SQL

    PDO::ERRMODE_EXCEPTION);
    $i = 0;
    $test_pdo = 0;
    $k = 0;
    $j = 1;
    $l = 0;

    $strId = « Id »;
    $strNom = « Nom »;
    $strPrenom = « Prenom »;
    $strAge = « Age »;
    $strAbo = « Abo »;
    $strEmail = « E-mail »;
    $strVille = « Ville »;
    $strAchats = « Achats »;
    $strTotal = « Total »;

    $id = FALSE;
    $nom = FALSE;
    $prenom = FALSE;
    $age = FALSE;
    $abo = FALSE;
    $email = FALSE;
    $ville = FALSE;
    $achats = FALSE;
    $total = FALSE;

    // On recupere les variables envoyees via le formulaire
    $requete = $_POST[‘requete’];
    $titre = $_POST[‘titre’];

    // Connection a la db et test d’erreur
    try
    {
    $bdd = new PDO(‘mysql:host=localhost;dbname=test;charset=utf8’, ‘root’,  », $pdo_option);
    }
    catch (Exception $e)
    {
    die(« Erreur :  » . $e->getMessage());
    }

    // On recupere la requete entree et on lance le travail
    $reponse = $bdd->query($requete);

    if($pdo_option){
    $test_pdo = 0;
    }
    else{
    $test_pdo = 1;
    }

    if(preg_match(‘`id`’, $requete) OR preg_match(‘`[*]`’, $requete))
    $id = TRUE;
    if(preg_match(‘{`nom`}’, $requete) OR preg_match(‘`[*]`’, $requete))
    $nom = TRUE;
    if(preg_match(‘`prenom`’, $requete) OR preg_match(‘`[*]`’, $requete))
    $prenom = TRUE;
    if(preg_match(‘`age`’, $requete) OR preg_match(‘`[*]`’, $requete))
    $age = TRUE;
    if(preg_match(‘`abo`’, $requete) OR preg_match(‘`[*]`’, $requete))
    $abo = TRUE;
    if(preg_match(‘`email`’, $requete) OR preg_match(‘`[*]`’, $requete))
    $email = TRUE;
    if(preg_match(‘`ville`’, $requete) OR preg_match(‘`[*]`’, $requete))
    $ville = TRUE;
    if(preg_match(‘`achats`’, $requete) OR preg_match(‘`[*]`’, $requete))
    $achats = TRUE;
    if(preg_match(‘`total`’, $requete) OR preg_match(‘`[*]`’, $requete))
    $total = TRUE;

    ?>

    <?php
    if($id == TRUE)
    echo '’ . $strId .  »;
    if($nom == TRUE)
    echo  » . $strNom .  »;
    if($prenom == TRUE)
    echo  » . $strPrenom .  »;
    if($age == TRUE)
    echo  » . $strAge .  »;
    if($abo == TRUE)
    echo  » . $strAbo .  »;
    if($email == TRUE)
    echo  » . $strEmail .  »;
    if($ville == TRUE)
    echo  » . $strVille .  »;
    if($achats == TRUE)
    echo  » . $strAchats .  »;
    if($total == TRUE)
    echo  » . $strTotal .  »;
    ?>

    fetch())
    {
    ?>

    <?php
    if($id == TRUE)
    echo '’ . $donnees[‘id’] .  »;
    if($nom == TRUE)
    echo  » . $donnees[‘nom’] .  »;
    if($prenom == TRUE)
    echo  » . $donnees[‘prenom’] .  »;
    if($age == TRUE)
    echo  » . $donnees[‘age’] .  »;
    if($abo == TRUE)
    echo  » . $donnees[‘abo’] .  »;
    if($email == TRUE)
    echo  » . $donnees[’email’] .  »;
    if($ville == TRUE)
    echo  » . $donnees[‘ville’] .  »;
    if($achats == TRUE)
    echo  » . $donnees[‘achats’] .  »;
    if($total == TRUE)
    echo  » . $donnees[‘total’] . ‘ €’;
    ?>

    closeCursor();
    ?>

    <?php
    echo 'Il y a ' . $i . ' entrées correspondantes a vos critères. ‘;
    echo ‘Requéte SQL saisie : ‘ . $requete;
    ?>

    getActiveSheet();
    $worksheet->setActiveSheetIndex(0);
    $sheet=$worksheet->getActiveSheet();

    $sheet->setCellValueByColumnAndRow($k, $j, $titre);
    $j = 3;

    if($id == TRUE){
    $sheet->setCellValueByColumnAndRow($k, $j, $strId);
    $k++;
    }
    if($nom == TRUE){
    $sheet->setCellValueByColumnAndRow($k, $j, $strNom);
    $k++;
    }
    if($prenom == TRUE){
    $sheet->setCellValueByColumnAndRow($k, $j, $strPrenom);
    $k++;
    }
    if($age == TRUE){
    $sheet->setCellValueByColumnAndRow($k, $j, $strAge);
    $k++;
    }
    if($abo == TRUE){
    $sheet->setCellValueByColumnAndRow($k, $j, $strAbo);
    $k++;
    }
    if($email == TRUE){
    $sheet->setCellValueByColumnAndRow($k, $j, $strEmail);
    $k++;
    }
    if($ville == TRUE){
    $sheet->setCellValueByColumnAndRow($k, $j, $strVille);
    $k++;
    }
    if($achats == TRUE){
    $sheet->setCellValueByColumnAndRow($k, $j, $strAchats);
    $k++;
    }
    if($total == TRUE){
    $sheet->setCellValueByColumnAndRow($k, $j, $strTotal);
    $k++;
    }

    $j = 1;
    $k++;

    do{
    if($id == TRUE){
    $sheet->setCellValueByColumnAndRow($k, $j, $donnees[‘id’]);
    $k++;
    }
    if($nom == TRUE){
    $sheet->setCellValueByColumnAndRow($k, $j, $donnees[‘nom’]);
    $k++;
    }
    if($prenom == TRUE){
    $sheet->setCellValueByColumnAndRow($k, $j, $donnees[‘prenom’]);
    $k++;
    }
    if($age == TRUE){
    $sheet->setCellValueByColumnAndRow($k, $j, $donnees[‘age’]);
    $k++;
    }
    if($abo == TRUE){
    $sheet->setCellValueByColumnAndRow($k, $j, $donnees[‘abo’]);
    $k++;
    }
    if($email == TRUE){
    $sheet->setCellValueByColumnAndRow($k, $j, $donnees[’email’]);
    $k++;
    }
    if($ville == TRUE){
    $sheet->setCellValueByColumnAndRow($k, $j, $donnees[‘ville’]);
    $k++;
    }
    if($achats == TRUE){
    $sheet->setCellValueByColumnAndRow($k, $j, $donnees[‘achats’]);
    $k++;
    }
    if($total == TRUE){
    $sheet->setCellValueByColumnAndRow($k, $j, $donnees[‘total’]);
    $k++;
    }
    $l++;
    $k++;
    $j = 1;

    }while($l save($records);

    $fp = fopen(‘historique_requetes.txt’, ‘a+’);
    $ligne = date(‘d/m/Y, H:i:s’) . ‘ -> ‘ . $requete . ‘ | TRUE = ‘ . $test_pdo;
    fputs($fp, $ligne);
    fputs($fp, « \r\n »);
    fclose($fp);
    ?>

    • Christiane Lagacé

      Bonjour Mathieu,

      Vous générez le fichier Excel après avoir affiché les données à l’écran. Pour que ça fonctionne, il ne faut rien envoyer au navigateur avant de générer le fichier, pas même le doctype.

    • Christiane Lagacé

      J’ai ajusté l’extrait de code dans l’article pour illustrer une façon de procéder.