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
ecceziunale veramente
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”);
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;”);
a me non funziona. vedo il codice php nelle vele di excel
non funge… mi crea un file vuoto. perchè?
ottimo, ma io vorrei che mi comparisse non solo il foglio, ma anche la barra degli strumenti. non sai come si può fare?
teste teste
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
…sarà mrglio che impari a fare una query… altrimenti coi database non ci fai niente…
$filename non è una query…
…
Di una semplicità disarmante…non mi sarebbe mai venuto in mente…
Penso che lo stesso valga per un documento WORD … ora povo
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.
Bravo bravissimo!
…se non fosse che l’inline te lo apre direttamente
cmq…
great
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
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???
Bellissimo! Semplice e funzionale. Grazie, mi hai risolto un problema.
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
Grazie!