La soluzione si articola in 4 semplici passi:
1. Esecuzione della Query con MySQL
2. Formattazione delle righe in formato CSV
3. Invio dell'opportuno Mime-Type
4. Output
Esecuzione della Query con MySQLSupponiamo di voler esportare in Excel un elenco clienti da un applicativo php/MySQl la prima cosa da fare sarà ovviamente la query sul db per l'estrazione dati, che sarà qualcosa di simile;
<?php
$hostname = "";
$database = "";
$username = "";
$password= "";
$conn= mysql_pconnect($hostname, $username, $password) or die(mysql_error());
mysql_select_db($database, $conn);
$query = "SELECT nome, cognome, citta FROM clienti";
$clienti = mysql_query($query, $conn) or die(mysql_error());
$row_clienti = mysql_fetch_assoc($clienti);
?>
Formattazione record CSVA questo punto andiamo a formattare ogni riga separando i campi con la tabulazione ed includendo i campi di testo con i doppi apici. Il carattere speciale di tabulazione in php è "\t" e per includere i doppi apici useremo sempre lo slash;
<?php
do {
$righe.= "\"".$row_clienti['nome']."\"\t\"".$row_clienti['cognome'].
"\"\t\"".$row_clienti['citta']."\"\n";
} while ($row_clienti= mysql_fetch_assoc($clienti));
?>
L'invio del Mime-TypeQuesta è la parte fondamentale di tutto il codice, l'invio del'header con il Mime-Type adatto per Excel. Attenzione a non inviare nulla in output prima dell'header, pena il mancato funzionamento;
<?php
header("Content-type: application/vnd.ms-excel");
header("Content-disposition: nomefile.xls");
?>
e per finire, inviamo i dati e usciamo;
<?php
print $righe;
exit;
?>
Se è tutto impostato a dovere, quando si chiama il file non si apre nessuna nuova finestra, ma il browser invia un file CSV ed il sistema apre la classica maschera di salvataggio, quindi apre il foglio Excel con i dati. Ho provato anche ad inviare dati numerici con differenti formati e vengono letti benissimo. Basta utilizzare le funzioni di formattazione del php e non includere il dato nei doppi apici. Testato sia con Internet Explorer che con Firefox.
Tratto da:
ikaro.net