Espace membres

Bonjour Anonyme

Inscription

Email :
Mot de passe :

Mot de passe oublié ?

Nos scripts

MySpeach

MySpeach est un chat php sans base de donnée, rapide, léger et facile à prendre en main. DEMO

MyPHPUpload

MyPHPUpload est un script d'upload sécurisé écrit en PHP. DEMO

GrapAgenda

Agenda PHP et MySQL avec comptes utilisateurs et administration. DEMO

Livre PHP

Créer un fichier Excel CSV à partir d'une table MySQL

Cours / tutoriel écrit le 25-06-2010 par sky
Création d'un fichier Excel CSV à partir d'une base de données MySQL.

Création d'un fichier Excel CSV à partir d'une base de données MySQL.

Le principe est de faire une requête MySQL pour parcourir les données que l'on souhaite enregistrer puis de générer le fichier Excel CSV et pour finir de l'envoyer au navigateur avec les entêtes qui vont bien pour le télécharger directement.

Récupération des données pour le fichier Excel CSV :
<?php
// la variable qui va contenir les données CSV
$outputCsv = '';

// Nom du fichier final
$fileName = 'export-csv.csv';

$requete = "SELECT * FROM Catalogue ORDER BY Nom";
$sql = mysql_query($requete);
if(mysql_num_rows($sql) > 0)
{
    $i = 0;

    while($Row = mysql_fetch_assoc($sql))
    {
        $i++;

        // Si c'est la 1er boucle, on affiche le nom des champs pour avoir un titre pour chaque colonne
        if($i == 1)
        {
            foreach($Row as $clef => $valeur)
                $outputCsv .= trim($clef).';';

            $outputCsv = rtrim($outputCsv, ';');
            $outputCsv .= "\n";
        }

        // On parcours $Row et on ajout chaque valeur à cette ligne
        foreach($Row as $clef => $valeur)
            $outputCsv .= trim($valeur).';';

        // Suppression du ; qui traine à la fin
        $outputCsv = rtrim($outputCsv, ';');

        // Saut de ligne
        $outputCsv .= "\n";

    }
}
else
    exit('Aucune donnée à enregistrer.');
?>



Maintenant que nous avons les données à enregistrer dans le fichier Excel, on peux générer les entêtes, créer le fichier et forcer le téléchargement.
<?php
// Entêtes (headers) PHP qui vont bien pour la création d'un fichier Excel CSV
header("Content-disposition: attachment; filename=".$fileName);
header("Content-Type: application/force-download");
header("Content-Transfer-Encoding: application/vnd.ms-excel\n");
header("Pragma: no-cache");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0, public");
header("Expires: 0");

echo $outputCsv;
exit();
?>



Et voici pour les impatients, le code complet :
<?php
// Connexion MySQL
// Obligatoire pour la suite !

// la variable qui va contenir les données CSV
$outputCsv = '';

// Nom du fichier final
$fileName = 'export-csv.csv';

$requete = "SELECT * FROM Catalogue ORDER BY Nom";
$sql = mysql_query($requete);
if(mysql_num_rows($sql) > 0)
{
    $i = 0;

    while($Row = mysql_fetch_assoc($sql))
    {
        $i++;

        // Si c'est la 1er boucle, on affiche le nom des champs pour avoir un titre pour chaque colonne
        if($i == 1)
        {
            foreach($Row as $clef => $valeur)
                $outputCsv .= trim($clef).';';

            $outputCsv = rtrim($outputCsv, ';');
            $outputCsv .= "\n";
        }

        // On parcours $Row et on ajout chaque valeur à cette ligne
        foreach($Row as $clef => $valeur)
            $outputCsv .= trim($valeur).';';

        // Suppression du ; qui traine à la fin
        $outputCsv = rtrim($outputCsv, ';');

        // Saut de ligne
        $outputCsv .= "\n";

    }

}
else
    exit('Aucune donnée à enregistrer.');

// Entêtes (headers) PHP qui vont bien pour la création d'un fichier Excel CSV
header("Content-disposition: attachment; filename=".$fileName);
header("Content-Type: application/force-download");
header("Content-Transfer-Encoding: application/vnd.ms-excel\n");
header("Pragma: no-cache");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0, public");
header("Expires: 0");

echo $outputCsv;
exit();
?>


Des questions ?
Le forum est là pour ça !

Commentaires

shabaley le 09-10-2012

j'ai crée un site web avec 9 page de contact donc je chercher un tutoriel en php ou html et javascript, ce lui que j'ai crée j'ai un message qui me dit qu'il n'est pas defini. je me voie pas bien dout vient se problèmes Merci de votre aidre

zukaf le 05-10-2012

Excellent tuto ! Je te remercie infiniment !!!
Petit détail, j'ai fait un include de ma page head.php(qui inclut ma connexion sql) et ca à également exporter le code de ma page.
Du coup, je conseil de ne pas utilisé d"include" dans ce code.

Encore merci ...

marlo le 21-08-2012

bonjour

je voudrais place le résultat dans une cellules précise

car j'ai un entête dans mon fichier !

suggestion a me faire ?

merci

negitep le 10-07-2012

il faut que tu fasse attention que aucun caractère ne s'affcihe avant d'utiliser les headers. un exemple simple si sont encodage est utf8 avec BOM. le BOM s'affiche avant les headers.

leon_g le 27-06-2012

merci beaucoup pour ce code genial!!!
A+

mawaloo le 31-05-2012

es "header" me renvoi des erreurs, exemple :
Warning: Cannot modify header information - headers already sent by (output started at /homez.42/monserveur/www/gestion-commandes-export.php:26) in /homez.42/monserveur/www/gestion-commandes-export.php on line 100

c valable pour toutes les lignes du "header"
// Entêtes (headers) PHP qui vont bien pour la création d'un fichier Excel CSV
header("Content-disposition: attachment; filename=".$fileName);
header("Content-Type: application/force-download&quot;
header("Content-Transfer-Encoding: application/vnd.ms-excel\n&quot;
header("Pragma: no-cache&quot;
header("Cache-Control: must-revalidate, post-check=0, pre-check=0, public&quot;
header("Expires: 0&quot;

Et comme les header ne fonctionnent pas les informations de la base de données s'affichent dans ma page et pas de génération de fichier csv.

Auriez-vous une idée ?
Merci d'avance de vos réponses.

Lutin1801 le 22-05-2012

merci beaucoup ca marche super et c'est le premier code que je trouve qui fonctionne !

googler le 22-09-2011

Merci beaucoup. :)

Pseudo
Email
Commentaire

Merci d'écrire le code ici :