picture picture
novembre 29, 2011 Excel, MySQL, PHP 4 Commentaires

PHP : exporter une table MySQL vers un fichier Excel

NOTA : article mis à jour ici (juin 2015)

Depuis la version d’Excel 2007, les exportations en PHP de données sous Excel (par exemple des extractions depuis une table MySQL) déclenchent  l’affichage d’un désagréable message d’erreur à l’ouverture du .xls

Il y a bien la solution de passer outre, les données sont tout de même présentes dans le fichier exporté…

Mais il existe une autre solution plus « propre » !

Pour éviter ce message d’erreur à l’ouverture du fichier exporté :

(cliquez pour agrandir)

[…], l’astuce est d’exporter les données PHP avec l’extension .csv et non pas .xls ! Si l’on met un .xls, il faudrait extraire un tableau formaté en HTML, ce qui est nettement plus lourd.

Voici un exemple de script d’export Excel de 2 champs d’une table :

// Connexion à la base des données 
$db_link = mysql_connect ("host", "login", "mot-de-passe") or die ('Je ne peux pas me connecter a la base parceque : ' . mysql_error()); 
mysql_select_db ("nom-de-la-base"); 

// on exporte la table sous forme d'un tableau
$requete = "SELECT champ1, champ2  FROM table"; 
$result = mysql_query($requete) or die('Erreur SQL !<br />'.$requete.'<br />'.mysql_error()); 
mysql_close(); 
$montablo = array(); 
while($row = mysql_fetch_array($result, MYSQL_NUM)) { 
  $montablo[] = implode("t", $row); 
} 

// on formate le fichier CSV 
$montablo = implode("rn", $montablo); 
$datestamp = date("Y-m-d"); 
$filename = $datestamp."_table.csv";   

// on insère les en-têtes Excel 
header("Content-Disposition: attachment; filename=$filename"); 
header("Content-Type: application/vnd.ms-excel"); 

// et on exporte le fichier 
echo $montablo; 

									

8)

4 Responses to “PHP : exporter une table MySQL vers un fichier Excel”

4 Commentaires

  1. Mawlaa dit :

    $result = mysql_query($requete,nom de la bese)
    et ca va marcher

  2. remy dit :

    Bonjour,

    J’ai récupéré ce code mais j’ai ce message d’erreur mysqli_query() expects at least 2 parameters, 1 given.

    Du coup cela doit être en rapport avec la question de christophe??

    Merci d’avance.

  3. christophe dit :

    Bonjour,
    Votre exemple a l’air de marcher, mais pourquoi chaque colonne est répétée 2 fois?
    14/03/2016
    Merci de votre réponse
    Robert

Commentaire

Name

Mail (ne sera pas publié)

Website

Laisser ces deux champs tels quels :
:D :-) :( :o 8O :? 8) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: