Voici un code PHP utilisé pour exporter des données d’une base de données MySQL vers un fichier Excel (.csv ou .xls):
<?
//ce fichier montre un exemple permettant de generer un fichier excel (on peut remplacer le .csv par .xls)
//parametres de connexion a la bdd
include("config.php");
//Premiere ligne = nom des champs (si on en a besoin)
//$csv_output = "p_nom,p_email";
//$csv_output .= "\n";
//Requete SQL
$query = "SELECT ...
FROM ...
WHERE ...
";
$result = mysql_query($query)
or die('Erreur SQL !<br />' . $query . '<br />' . mysql_error());
//Boucle sur les resultats
while($row = mysql_fetch_array($result)) {
$csv_output .= "$row[p_nom] $row[p_prenom],$row[p_nom],$row[p_prenom],$row[p_email]\n";
}
header("Content-type: application/vnd.ms-excel");
header("Content-disposition: attachment; filename=AddressBook_" . date("Ymd").".csv");
print $csv_output;
exit;
?>
j’ai fais mes recherches en attendant vos réponses d’après ce que j’ai compris le premier header envoie les données vers un fichier csv et le second header sert un donner un nom au fichier csv.
Je ne comprend pas d’où vient mon erreur.
C ‘eszt bon je vous remercie pour le script tout fonctionne parfaitement merci encore.
Bonjour Florent,
J’ai le même soucis que tu as eu, le texte s’affiche mais ne génère pas de fichier. Comment as-tu résolu ce problème stp ?
Merci de votre aide
Ce script a l’air super mais je ne m’en sort pas
++
Vincent
Réponse : afficher la page en directe ne fonctionne pas, il faut la consulter a partir d’un lien d’une autre page. Et là ca fonctionne :p
Bonjour et…. BRAVO BIEN SUR!!!! Enfin quelque chose de clair qui fonctionne!!! Merci beaucoup!
Juste un petit souci, lorsque je mets ce code dans ma page php, dans mon fichier excel, avant les valeurs du tableau j’ai tout mon code!!
Quelqu’un sait comment faire pour pas qu’il apparraisse dans le fichier csv?
Merci d’avance!!!
bonjour je suis entrain de developer un intranet en ce moment pour mon travail et je dois exporter un base de donnee en csv ou xls. tout fonctionne, l’export se fait mais le seul soucis que jai c’est que des quil y a une virgule dans ma base elle change de case dans la feuille excel. y’a til un moyen pour changer cela?
ceci devient tres urgent pour moi de trouver une solution a ce problem pouvez vous maider svp…
merci davance
il suffit d’échapper toutes tes virgules avec des “\”, il existe des fonctions PHP faites spécialement pour ça
slt,
bah merci pour ton code c vraiment génial.mais le probleme chez moi c’est que sur mon fichier excel tout est affiché,c à dire le code html que j utilise pour la décoration de la page.cà c’est d’une part d’autre part le code se bloque qand je commnace la page avec session_start() sachant que g besoin de ça pour utilser une variable d’une autre page dans la requett sql.
merci de me répondre .
Salut
Sympa de mettre ton script, perso ça fais un moment que je joue avec mysql et excel et plus simplement j’ouvre un fichier que j’apelle .xls pis je fais des fwrite
$chaine = ” \t”.$num_facture.”\t”.$Societe.”\t”.$MontantHT.”\t”.$MontantTTC.”\t \n”;
$file = “tableau_excel.xls”;
$fp = fopen($file, “w+”);
foreach ($tab_excel as $id=>$val)
{
fwrite($fp,$val);
}
fclose($fp);
Merci pour ce script ca marche nikel
Bonjour,
J’ai besoin de faire une export de ma base en csv ou xls. Je suis débutant en PHP. J’écris le code sur notepad puis je test ma page avec le serveur apache (en local). Aucun fichier ne se telecharge. J ‘arrive pas a recuperer le fichier . CSV.
Voici mon code:
Merci pour votre aide
Bravo et merci David, effectivement !
Je cherchais comment exporter en .CSV une partie de mes tables MySQL (que certaines lignes et que certaines colonnes), et j’ai trouvé ton “code” en fouillant le ouèbe. Il m’a fallu quand même une demi-heure pour comprendre comment il marchait, et pour le traduire avec mes variables et mes données, car c’est la première fois que je faisais un export en .CSV .
Et maintenant ça marche : la fenêtre de téléchargement apparaît toute seule, quand je clique sur mon bouton (lien) d’exportation, et le document.CSV vient se “poser” sur mon bureau ; dans mon tableur (NeoOffice), je retrouve mes données comme il faut ! Et le document.CSV est daté du jour (ex : document_20090329) ! Encore bravo !
J’ai même remplacé la ligne :
header(“Content-type: application/vnd.ms-excel”);
par la ligne :
header(“Content-Type: application/csv-tab-delimited-table”);
et ça marche pareil !
p’tite contribution,ajouter :
header(“Content-Type: text/csv; charset=windows-1252/Winlatin1″);
pour éviter les surprises d’encodages des caractères dans M$ Excel…
Ca fonctionne nickel mais mon xls est ouvert en lecture seule, j’aimerais bien avoir le mode en écriture… ou peut etre ce n’est pas possible?
Bonjour, voici mon code :
session_cache_limiter(‘none’);
session_start();
$csv_output = “Numéro de lot ; Numéro de série ; Libellé d’identification ; Code pin”;
$csv_output .= “\n”;
$max = count($_SESSION['tab_lot']);
for($i=0;$i<$max;$i++){
$csv_output .= $_SESSION['tab_lot'][$i];
$csv_output .= ” ; “;
$csv_output .= $_SESSION['tab_serie'][$i];
$csv_output .= ” ; “;
$csv_output .= $_SESSION['tab_identification'][$i];
$csv_output .= ” ; “;
$csv_output .= $_SESSION['tab_pin'][$i];
$csv_output .= “\n”;
}
header(“Content-type: application/vnd.ms-excel”);
header(“Content-disposition: attachment; filename=resultat_histo_” . date(“Ymd”).”.csv”);
readfile($csv_output);
exit;
Lorsque j’exporte ce fichier sur excel , il y a marquer
Warning: readfile(Numéro de lot
et
function.readfile]: failed to open stream: No such file or directory in /home/securilo/sd/ges/exporthisto.php on line 39
pouvez vous m’aider ?
Je dois prendre le temps d’écrire un commentaire car ça fait plusieurs heures que je cherche pourquoi mes accents ne fonctionnent pas dans le fichier Excel. Grâce à ta réponse Laetitia (utf8_decode), ça fonctionne!
Hourra Laetitia!
Hourra Laetitia!