Esportazione da PHP in formato Excel
oggi vediamo come creare facilmente un foglio excel / calc di Openoffice mediante l’utilizzo di php.
Per farlo senza alcuna difficolta sfruttiamo la capacità di Excel di leggere file HTML.
In sostanza tutto quello che dobbiamo fare è creare una semplice tabella HTML di 2 righe e quante colonne ci servono, la prima indica il contenuto del campo, la seconda riga la usiamo per farla ciclare con i dati estratti da php.
Una volta ottenuta in HTML la tabella con i dati desiderati basta semplicemente anteporre al nostro script le seguenti righe PHP:
< ?php
$nomefile=$_GET['nomefile']“.xls”;
header (”Content-Type: application/vnd.ms-excel”);
header (”Content-Disposition: inline; filename=$nomefile”);
?>
In sostanza basta passare per comodità al nostro script il nome del file, ad esempio:
http://www.miosito.com/export-excel.php?nomefile=esportazione
A questo punto automaticamente ci verrà proposto dal browser di salvare un file di nome esportazione.xls con i dati contenuti all’interno della tabella HTML precedentemente visualizzata.
Strano ma vero… è tutto qui…
Ciao. Maxgrante
info[AT]massimo-caselli[DOT]com

6 Marzo 2006 - 10:13
Metodo alternativo:
creare un file di testo con estensione .xls e creare le colonne intervallando i valori col carattere TAB come nell’esempio sottostante…
“valore1″\t”valore2″\t”valore3″
“valore1″\t”valore2″\t”valore3″
“valore1″\t”valore2″\t”valore3″
questo e’ il formato standard dei file CSV che excel interpreta come file suoi se vede l’estensione xls.
6 Marzo 2006 - 10:17
Grazie del suggerimento!
Ciao. Max
6 Marzo 2006 - 10:59
C’è un pacchetto di pear che ho usato per l’esportazione dei dati i formato Excel: http://pear.php.net/package/Spreadsheet_Excel_Writer
Lo consiglio caldamente a chiunque abbia bisogno di funzioni avanzate nella generazione dei file, infatti grazie al suddetto pacchetto è possibile impostare qualsiasi aspetto del foglio di lavoro, formattazione, fogli multipli, ecc.
Dall’homepage:
Spreadsheet_Excel_Writer was born as a porting of the Spreadsheet::WriteExcel Perl module to php.
It allows writing of Excel spreadsheets without the need for COM objects.
It supports formulas, images (BMP) and all kinds of formatting for text and cells.
It currently supports the BIFF5 format (Excel 5.0), so functionality appeared in the latest Excel versions is not yet available.
6 Marzo 2006 - 11:48
se volessi fare incontrario da fogli Xls portarlo in databse ?
6 Marzo 2006 - 11:50
In questo caso dovresti salvare in CSV e importare per esempio da Phpmyadmin che lo prevede già .
Altrimenti devi farti un parser che prende i dati e li mette a DB.
Ciao. Max
12 Agosto 2006 - 08:40
Non mi funge…
28 Agosto 2006 - 14:36
Caro Gino,
dacci maggiori dettagli cosi’ da poterti aiutare.
Bye, Max
6 Ottobre 2006 - 15:59
buongiorno a tutti
mi trovo di fronte allo stesso problema di gino.
premetto che lavoro su win xp con excel versione 2000 e forse e’ questo il problema…
ho installato pear e ho scaricato il pacchetto. provo a lanciare il codice php suggerito nella documentazione. la pagina php non genera errori e il file excel viene creato ma al suo interno vedo, oltre al testo che ho chiesto di scrivere, tutta una serie di caratteri “tipo quadratini”.
devo rinunciare o c’e’ speranza?
grazie.
n.
6 Ottobre 2006 - 20:55
Come per Gino, dacci maggiori dettagli…
Siete sicuri di settare l’header giusto? O che apache non forzi qualche tipo di codifica/mime?
13 Ottobre 2006 - 13:59
Salve a tutti.. ho provato a far funzionare il writer ma non riesco a capire come mai non mi va…
Dando un’occhiata al codice del file writer.php ho visto che include dei file che perà hanno un percorso sbagliato…
Uno di questi file poi include dei file che nel pacchetto che ho scaricato non ci sono: tipo
require_once ‘OLE/PPS/File.php’;
Devo scaricare altre cose? devo installare il acchetto in un modo particolare?
Devo aver saltato qualche passaggio.. qualcuno mi puà aiutare?
Grazie mille
16 Novembre 2006 - 12:02
Salve,
vorrei impostare la virgola, come separatore dei campi di un file .CSV, di default in excel 2000.
Come posso fare???
Grazie in anticipo!!!
31 Gennaio 2007 - 18:49
Sono un programmatore esperto e volevo sapere se sapete come fare per esportare un file excel in formato binario usando ajax pero che usi vbscript come codice client e’ che il codice non sia visibile lato client
31 Gennaio 2007 - 19:01
Se il codice è eseguito lato client dubito che esso possa non essere visibile.
Magari mi sbaglio, ma penso sia proprio così.
Ciao. Max
23 Giugno 2007 - 11:43
E’ possibile, invece che esportare l’intera pagina web, esportare solo il contenuto di una data tabella che si trova all’interno della pag?
27 Agosto 2007 - 12:48
è possibile creare un csv da un foglio exel????
25 Settembre 2008 - 10:45
roba da non credere…. ha funzionato alla perfezione al primo tentativo
certo sarà semplice e con poca personalizzazione ma funziona molto bene
poi una volta messa la tabella in excell ci si può fare quello che si vuole
5 Febbraio 2009 - 10:46
Se esporto dei dati decimali non mi fa vedere le virgole… ad esempio, invece di scrivermi 18,00 , mi scrive 18. E’ un problema di Excel e di Open Office?
5 Febbraio 2009 - 11:34
Ciao,
penso che devi fare un replace del . con la virgola dai dati che estrai da DB perché sia excel che OO vogliono la virgola per separare i decimali.
27 Febbraio 2009 - 00:44
Chiaro, grazie mille
11 Giugno 2009 - 15:12
salve io volevo sapere se era possibile invece creare un csv a runtime senza andare a scrivere nel file html….
In pratica fino ad ora scrivevo nell’header,
header(”Content-type: text/csv”);
header(”Content-Disposition: attachment; filename=\”grafico_mono.csv\”");
e poi con i miei dati andavo a scrivere il csv direttamente dividendo i campi con le virgole e andando a capo a fine stringa….
Il tutto funziona se non per il fatto che una volta che ho creato il csv devo importalo da excel altrimenti la visualizzazione è poco chiara, in questo caso invece da quanto ho capito sarebbe già formattato in tabella.
13 Giugno 2009 - 22:57
@milejo
Scusa ma non ho capito bene, intendi come salvare il file su file system?
Oppure come generare un XLS effettivo?
Ciao, Max
21 Luglio 2009 - 15:24
Ciao a tutti,
volevo sapere perchè adottando questa soluzione
il file di XLS generato rimuove gli zeri iniziali dalle colonne che contengono numeri telefonici o comunque numeri che iniziano con gli zeri .
Grazie
27 Luglio 2009 - 07:28
Ciao Paolo,
il problema è legato a come gestisce excel quelle colonne ovvero convertendole in numeri.
Io ho risolto con le librerie CSVtoExcel delle pear (se non sbaglio) che ti consentono di generare da un csv un excel formattando le colonne.
Dove c’era la PI o un CF le definivo come testuali.
Ciao, Max