Home > PHP il turbo nel web > Esportazione da PHP in formato Excel

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

Share
Categorie:PHP il turbo nel web Tag:
  1. Truijllo
    6 March 2006 a 10:13 | #1

    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.

  2. 6 March 2006 a 10:17 | #2

    Grazie del suggerimento!

    Ciao. Max

  3. Ludovico
    6 March 2006 a 10:59 | #3

    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.

  4. Giancarlo
    6 March 2006 a 11:48 | #4

    se volessi fare incontrario da fogli Xls portarlo in databse ?

  5. 6 March 2006 a 11:50 | #5

    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

  6. 12 August 2006 a 8:40 | #6

    Non mi funge… :(

  7. 28 August 2006 a 14:36 | #7

    Caro Gino,
    dacci maggiori dettagli cosi’ da poterti aiutare.

    Bye, Max

  8. gaia
    6 October 2006 a 15:59 | #8

    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.

  9. 6 October 2006 a 20:55 | #9

    Come per Gino, dacci maggiori dettagli…

    Siete sicuri di settare l’header giusto? O che apache non forzi qualche tipo di codifica/mime?

  10. vrer
    13 October 2006 a 13:59 | #10

    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 :)

  11. den87
    16 November 2006 a 12:02 | #11

    Salve,
    vorrei impostare la virgola, come separatore dei campi di un file .CSV, di default in excel 2000.
    Come posso fare???
    Grazie in anticipo!!!

  12. 31 January 2007 a 18:49 | #12

    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

  13. 31 January 2007 a 19:01 | #13

    Se il codice è eseguito lato client dubito che esso possa non essere visibile.
    Magari mi sbaglio, ma penso sia proprio così.

    Ciao. Max

  14. GaB
    23 June 2007 a 11:43 | #14

    E’ possibile, invece che esportare l’intera pagina web, esportare solo il contenuto di una data tabella che si trova all’interno della pag?

  15. andrea
    27 August 2007 a 12:48 | #15

    è possibile creare un csv da un foglio exel????

  16. 25 September 2008 a 10:45 | #16

    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

  17. 5 February 2009 a 10:46 | #17

    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?

  18. 5 February 2009 a 11:34 | #18

    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.

  19. 27 February 2009 a 0:44 | #19

    Chiaro, grazie mille :)

  20. milejo
    11 June 2009 a 15:12 | #20

    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.

  21. 13 June 2009 a 22:57 | #21

    @milejo
    Scusa ma non ho capito bene, intendi come salvare il file su file system?
    Oppure come generare un XLS effettivo?

    Ciao, Max

  22. Paolo
    21 July 2009 a 15:24 | #22

    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

  23. 27 July 2009 a 7:28 | #23

    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

  24. Vincenzo
    20 May 2010 a 22:36 | #24

    Salve, ho provato lo script e funziona alla grande, ma se quando esporto in formato excel volessi che la pagina sia orientata in modo orizzontale, come posso fare?
    Grazie

  25. 20 May 2010 a 23:32 | #25

    Ciao Vincenzo,
    in che senso in formato orizzontale?

    Excel di fatto non è né orizzontale né verticale ma solo una matrice righe/colonne.
    Poi per quanto riguarda la stampa quella è una faccenda inerente solo ad excel…

    O mi sfugge qualcosa?

    Ciao, Max

  1. 6 March 2006 a 23:12 | #1