Generare file excel da PHP

Questo script consente di generare dinamicamente documenti Excel senza instanziare oggetti COM lato server. Il tutto è fatto con poche righe di PHP.

Lo script imposta il Mime Type su quello di Excel (application/vnd.ms-excel), sfruttando una caratteristica, presente già in Office 97, che consente a Word ed Excel di leggere senza problemi documenti HTML. Inoltre, impostando l’header Content-Disposition: inline; filename=FILENAME richiede al browser di scaricare il file anziché aprirlo al suo interno. In seguito genera una tabella HTML che verrà interpretata da Excel come un suo foglio di lavoro. Per semplicità generiamo una semplice tabella pitagorica, ma nulla impedisce di prelevare i dati da database o altre fonti.

Il file così generato e scaricato viene aperto correttamente sia da Excel che dallo spreadsheet di OpenOffice.

Ecco il codice:

<?
   $filename="sheet.xls";
   header ("Content-Type: application/vnd.ms-excel");
   header ("Content-Disposition: inline; filename=$filename");
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang=it><head>
<title>Titolo</title></head>
<body>
<table border="1">
<?
for ($i=1;$i < 11; $i++)
{
   echo "<tr>";
   for ($j=1; $j<11;$j++)
   {
      $a = $i * $j;
      echo "<td>$a</td>";
   }
   echo "</tr>";
}
?>
</table>
</body></html>

Esempio

Commenti

  1. Direi eccezionale.. ;) Byez

  2. ecceziunale veramente

  3. ciao, ho dei problemi a visualizzare dei dati di tipo float: se metto il punto come separatore dei decimali il mio office (in italiano) lo considera come separatore delle migliaia. ho provato a impostare in questo modo ma mi rimbalza lo stesso print(“”); print(“”); print(“$my_float”);

  4. print(“&lgt;table border=1 rs:mso-displayed-decimal-separator=\”,\” “); print(“rs:mso-displayed-thousand-separator=\”.\”&rgt;”); print(“&lgt;td x:num=\”$myfloat\” align=\”right\”&rgt;$myfloat&lgt;/td&rgt;”);

  5. a me non funziona. vedo il codice php nelle vele di excel

  6. non funge… mi crea un file vuoto. perchè?

  7. ottimo, ma io vorrei che mi comparisse non solo il foglio, ma anche la barra degli strumenti. non sai come si può fare?

  8. Probabilmente mi sfugge qualche cosa ma se volessi creare un file excel da un database come faccio ad inviare i dati.
    Mi spiego megli:
    eseguo una query da un database MySql per esportarla in un file excel con il comando :
    $filename=”sheet.xls”;
    header (“Content-Type: application/vnd.ms-excel”);
    header (“Content-Disposition: attachment; filename=$filename”);
    i dati da inserire nel file .xls dove li prendo ???
    Se mi fate capire grazie in anticipo

  9. …sarà mrglio che impari a fare una query… altrimenti coi database non ci fai niente…
    $filename non è una query…

  10. Di una semplicità disarmante…non mi sarebbe mai venuto in mente…
    Penso che lo stesso valga per un documento WORD … ora povo

  11. In realtà Excel apre un file html e se lo salvi te lo salva sempre in HTML con l’estensione sbagliata .xls. Io che mi son trovato nella stessa situazione, ovvero esportare dati su un foglio di calcolo di Excel ho preferito (mi sembra più pulito) generare un file .csv con righe che contengono i campi racchiusi tra doppi apici e separati da `;`. La soluzione funziona anche con programmi per fogli di calcolo ( gnumeric, lotus o openoffice.org ). Non ci faccio la formattazione ma non rischio di generare confusione nell’utente che spesso ne ha già troppa di sua.

  12. Bravo bravissimo!

  13. …se non fosse che l’inline te lo apre direttamente :D
    cmq… ;)

  14. Ciao ottimo.
    Ho solo il prob,ema che la formttazione dei decimali è sballata.
    Nel db ho deti valori decimali di prezzi, esempio. 120.45 mentre nel file excel mi escono in questo modo: 120.04.05

    Da cosa può dipendere?
    GRAZIE

    ciao

  15. ho provato questo php per salvare un form in html, ma quando schiaccio invia mi ridà una pagina con questa stringa “”; for ($j=1; $j
    $a”

    dov’è l’errore???

  16. Bellissimo! Semplice e funzionale. Grazie, mi hai risolto un problema.

  17. L’idea e’ buona… Pero’ com’e’ ovvio la formattazione non viene rispettata per niente…
    Qualcuno ha qualche idea per rimediare a questo problema?
    Ciao,

    Pana

  18. Grazie mille ma ho un problema con gli accenti, ho inserito il charset UTF-8 ma non riesco a visualizzare le lettere accentate. Help Please
    thx

  19. In apertura di file compare sempre l’avviso: “Impossibile aprire il file ‘sheet.xls’ perchè ha estensione o formato non valido. Verificare che il file non sia danneggiato e che l’estensione corrisponda al formato del file.”

  20. Per inserire un immagine invece?

  21. Cosa usi?
    Hai provato ad aprirlo con LibreOffice?

  22. Ciao,
    ho trovato questo script molto utile.
    E’ possibile generare un excel con dei commenti?
    Ho un campo note nel DB e se lo stampo come gli altri campi perdo la larghezza delle colonne per me importante nel tipo di stampa.
    Per capirci come se fosse un title in html

  23. perfetto su Windows, mi dicono che su tablet android non funziona

  24. perfetto su Windows, mi dicon che non funzion su tablet android

Lascia un Commento

L'indirizzo email non verrà pubblicato.

È possibile utilizzare questi tag ed attributi HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Copyright © Fabrizio Tarizzo

Quest'opera è stata rilasciata sotto la licenza Creative Commons Attribuzione-Condividi allo stesso modo 3.0 Italia. Per leggere una copia della licenza visita il sito web http://creativecommons.org/licenses/by-sa/3.0/it/ o spedisci una lettera a Creative Commons, 171 Second Street, Suite 300, San Francisco, California, 94105, USA.