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>


Direi eccezionale.. ;) Byez
Commento di sacc82 — Martedì 11 Novembre 2003 @ 12:17:39
ecceziunale veramente
Commento di mulo — Martedì 2 Marzo 2004 @ 20:28:17
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;”);
Commento di webfrancy — Giovedì 6 Maggio 2004 @ 09:06:55
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”);
Commento di webfrancy — Giovedì 6 Maggio 2004 @ 09:09:31
a me non funziona. vedo il codice php nelle vele di excel
Commento di massimo — Mercoledì 25 Agosto 2004 @ 02:00:56
non funge… mi crea un file vuoto. perchè?
Commento di metatad — Martedì 22 Febbraio 2005 @ 12:50:20
ottimo, ma io vorrei che mi comparisse non solo il foglio, ma anche la barra degli strumenti. non sai come si può fare?
Commento di Stefano — Giovedì 28 Aprile 2005 @ 14:15:02
teste teste
Commento di claudio — Sabato 30 Aprile 2005 @ 23:03:19
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
Commento di Andrea — Lunedì 19 Settembre 2005 @ 11:55:50
…sarà mrglio che impari a fare una query… altrimenti coi database non ci fai niente…
$filename non è una query…
…
Commento di Fede — Lunedì 21 Novembre 2005 @ 12:20:47
Di una semplicità disarmante…non mi sarebbe mai venuto in mente…
Penso che lo stesso valga per un documento WORD … ora povo
Commento di Angelo F. — Domenica 4 Dicembre 2005 @ 12:22:13
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.
Commento di cuba3 — Giovedì 8 Dicembre 2005 @ 03:36:05
Bravo bravissimo!
Commento di AGe — Lunedì 21 Agosto 2006 @ 08:49:32
…se non fosse che l’inline te lo apre direttamente :D
cmq… ;)
Commento di ciro — Giovedì 29 Novembre 2007 @ 19:45:49
great
Commento di Jeky — Venerdì 11 Gennaio 2008 @ 14:29:23
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
Commento di Diego Lamb — Giovedì 24 Aprile 2008 @ 13:20:41
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???
Commento di luigi — Martedì 3 Giugno 2008 @ 18:43:09
Bellissimo! Semplice e funzionale. Grazie, mi hai risolto un problema.
Commento di soulwoman — Lunedì 23 Giugno 2008 @ 17:51:22