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;
  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 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.

Forum
Se stai cercando supporto tecnico o aiuto in merito ad un problema il posto giusto è il forum.
Daniele Di Gregorio 10.11.2006 - Opensource e strumenti on line
di Daniele Di Gregorio

Syndacate Feed

Feedburner Technorati

Avvisami per email quando sono presenti nuovi articoli:


Contatto Dove mi trovi


 Skype
 Twitter
 FriendFeed
 LinkedIn
 Flickr
 Facebook
 YouTube
 MyBlogLog
 Email
 

Creative Commons License
Ove non diversamente specificato, tutti i contenuti sono rilasciati sotto Licenza Creative Commons.

Logo
English