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é :
[…], 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;
$result = mysql_query($requete,nom de la bese)
et ca va marcher
Vérifie ta version PHP : http://php.net/manual/fr/function.mysql-query.php
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.
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