Come creare un file Excel con PHP e MySQL
Quattro semplici passi per esportare dati da sistemi php mysql ad Excel al volo
Apro una nuova sezione del portale dedicata allo sviluppo PHP che presto avrà una sezione dedicata. Creare un file Excel al volo con php è molto semplice e tremendamente utile nel caso di sviluppo applicazioni orientate al business come piattaforme di BI o gestionali di vario tipo.
La soluzione si articola in 4 semplici passi;
$hostname = "<host_db>";
$database = "<nome_db>";
$username = "<admin>";
$password= "<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);
?>
<?php
do {
$righe.= "\"".$row_clienti['nome']."\"\t\"".$row_clienti['cognome']."\"\t\"".$row_clienti['citta']."\"\n";
} while ($row_clienti= mysql_fetch_assoc($clienti));
?>
<?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 Explore che con Firefox.
La soluzione si articola in 4 semplici passi;
- Esecuzione della Query con MySQL
- Formattazione delle righe in formato CSV
- Invio dell'opportuno Mime-Type
- Output
Esecuzione della Query con MySQL
Supponiamo 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 = "<host_db>";
$database = "<nome_db>";
$username = "<admin>";
$password= "<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 CSV
A 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-Type
Questa è 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 Explore che con Firefox.
Altri articoli
sull'argomento che potrebbero interessarti...
Forum
Se stai cercando supporto tecnico o aiuto in merito ad un problema il posto giusto è il forum.
Se stai cercando supporto tecnico o aiuto in merito ad un problema il posto giusto è il forum.
10.11.2006 -

