Come buona parte dei miei post anche questo nasce, oltre che con l’intento di fare un po’ di informazione, per ricordarmi di come ho già risolto un problema che mi si è presentato: in effetti la mia memoria di solito è fallace e googolare per cercar la stessa informazione più di una volta non mi piace granchè ^_^
Un attività che spesso capita di dover effettuare è quella di processare “on the fly” un file xls (magari disponibile a seguito dell’upload di un utente) e gestire i dati in esso contenuti (possibilmente strutturati come da noi previsto altrimenti la cosa è improponibile..) per, ad esempio, popolare tabelle di un database o più semplicemente visualizzarli sul nostro sito.
Bene, la soluzione a questo problema è più semplice di quanto si pensi.
Esiste infatti un progetto su Sourceforge che tramite la classe ExcelReader rende disponibile tutto ciò che ci occorre.
Dopo aver incluso i due file reader.php e oleread.inc nel nostro script e saremo quindi pronti per svolgere il lavoro “sporco”.
Per prima cosa inizializziamo la nostra classe e in seguito passiamogli il file da aprire:
$data->read('nome_filel.xls');
la cosa successiva da fare, ovviamente, è effettuare un ciclo per ogni riga e colonna ricordando che:
$data->sheets[0]['numRows']; $data->sheets[0]['numCols'];
rappresentano rispettivamente il numero di righe e colonne contenute nel file xls (in particolare nel primo foglio del documento).
A questo punto possiamo prelevare il valore contenuto in ogni cella accedendovi come faremo con una banalissima matrice:
$data->sheets[0]['cells'][$i][$j];
Un esempio di script per mostrare a video i dati di un file xls in forma tabellare è quindi il seguente:
<?
require_once 'Excel/reader.php';
$data = new Spreadsheet_Excel_Reader();
$data->setOutputEncoding('CP1251');
$data->read('nome_file.xls');
error_reporting(E_ALL ^ E_NOTICE);
echo "<table>";
for ($i = 1; $i <= $data->sheets[0]['numRows']; $i++) {
echo "<tr>";
for ($j = 1; $j <= $data->sheets[0]['numCols']; $j++) {
echo "<td>".$data->sheets[0]['cells'][$i][$j]."</td>";
}
echo "</tr>";
}
echo "</table>";
?>
PS: Ovviamente è possibile ciclare anche sui fogli che compongono il file xls..
Popularity: 8% [?]



![Reblog this post [with Zemanta]](http://img.zemanta.com/reblog_e.png?x-id=1a581053-a80a-4f72-acd1-fdf59ecf4c5a)

![Reblog this post [with Zemanta]](http://img.zemanta.com/reblog_e.png?x-id=20abb08f-6808-4d5e-acfb-62b6da474325)
