Mar 06 2006
Esportazione da PHP in formato Excel
Ciao a tutti,
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
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.
Grazie del suggerimento!
Ciao. Max
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.
se volessi fare incontrario da fogli Xls portarlo in databse ?
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
[...] Esportazione da php in formato Excel [...]
Non mi funge…
Caro Gino,
dacci maggiori dettagli cosi’ da poterti aiutare.
Bye, Max
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.
Come per Gino, dacci maggiori dettagli…
Siete sicuri di settare l’header giusto? O che apache non forzi qualche tipo di codifica/mime?
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
Salve,
vorrei impostare la virgola, come separatore dei campi di un file .CSV, di default in excel 2000.
Come posso fare???
Grazie in anticipo!!!
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
Se il codice è eseguito lato client dubito che esso possa non essere visibile.
Magari mi sbaglio, ma penso sia proprio così.
Ciao. Max
E’ possibile, invece che esportare l’intera pagina web, esportare solo il contenuto di una data tabella che si trova all’interno della pag?
è possibile creare un csv da un foglio exel????
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
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?
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.
Chiaro, grazie mille
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.
@milejo
Scusa ma non ho capito bene, intendi come salvare il file su file system?
Oppure come generare un XLS effettivo?
Ciao, Max