Créer un fichier excel via php

Je cherchais un moyen d’exporter une partie de ma base de donnée vers un document excel et j’ai trouvé un script sur le blog de David Touvet. Je n’ai pas besoin d’expliquer le fonctionnement de ce script, son auteur a fait de l’excellent travail et tout est déjà commenté dans le code.

Le problème de ce script est qu’il ne permettait pas de faire correspondre les champs de la base de donnée avec les colonnes d’excel, en effet on se retrouvait avec une seule colonne de donnée dans excel (ce qui rendait le fichier inexploitable). J’ai donc modifié le script en une fonction qui permet de créer un fichier excel (xls ou csv) à partir d’une requête.

Afficher le code source

function Exporte($requete,$format,$entete)
{

//on commence le tableau

$csv_output = "<table>";

//si le tableau comporte des entrée on les affiche comme des entêtes

if(count( $entete ) > 0)
{
$csv_output .="<tr>";
foreach($entete as $valeur_entete)
{
$csv_output .= "<td>".$valeur_entete."</td>";
}
$csv_output .="</tr> ";
}

//on lance la requête

$result = mysql_query($requete) or die('Erreur SQL : '.mysql_error());

//pour chaque ligne de résultat on affiche les valeurs dans le tableau

while($ligne = mysql_fetch_row($result))
{
$csv_output .= "<tr>";
foreach($ligne as $valeur_ligne)
{
$csv_output .= "<td>".$valeur_ligne."</td>";
}
$csv_output .= "</tr> ";
}

//on termine la table

$csv_output .= "</table>";

header("Content-type: application/vnd.ms-excel");

header("Content-disposition: attachment; filename=ListeBenevole(" . date("d-m-Y").").$format");

print $csv_output;
exit;
}