paolo@bimodesign.com | +34 608 61 64 10

Framework

        

Php ed Excel

Come indicato nella premessa, questo e' l'archivio (zip) da utilizzare, nel quale incontrete la classe per l'acquisizione dei file excel.

Per iniziare occorre includere il file contenente la classe che, considerando la struttura presente nel file di archivio, e':

require(_PATH._LIB.'excel_reader/excel/reader.php');

Controllare se il file acquisito e' di tipo excel. Ancora non usiamo la classe excel, ma le seguenti istruzioni

$this->fileNameOrig = $_FILES['userfile']['name'];
$fileType     = $_FILES['userfile']['type'];
$fileSize     = $_FILES['userfile']['size'];

if ($fileType != "application/vnd.ms-excel"){
	$this->err = "errore bla bla bla";
	return false;
}

dove, chiaramente, la variabile $_FILES conterra' il vostro file passato come input alla form (non mi dilungo oltre su questo passaggio).

E ora questo semplice codice, dove richiamiamo la classe Spreadsheet_Excel_Reader ed il metodo read

....
public  $fileData=array();

try{
	$excel = new Spreadsheet_Excel_Reader();
	$excel->read($this->fileName);

	$this->fileData = $excel->sheets[0]['cells'];

	// Check if the first row has less nine columns
	if(count($this->fileData[1]) < 9){
		$this->err = "Il file presenta meno di 9 colonne";
		return false;
	}

	return true;
}catch (Exception $e) {
	$this->err = $e->getMessage();
	return false;
}

Come potete notare, il tutto risulta molto semplice. Notate che ho inserito un controllo sul numero minimo di colonne. Lo effettuo solo sulla prima riga visto che, come premesso, mi aspetto che tutte le celle siano valorizzate.

Infine, per escludere la lettura della riga di intestazione del file excel, occorre agire direttamente sulla lettura dell'array, in questo modo

foreach($this->fileData as $keyRows=>$value){
	if($keyRows > 1){
		if($oInventory->checkExist($value[3],$value[4])){

....

Nota: Considerare che la classe restituirà un array bidimensionale, dove le chiavi dell'array sono numeriche, ovvero del tipo

Array
(
    [0] => Array
        (
            [1] => Paolo
            [2] => Bindi
            [3] => Via del corso
            [4] => Roma
            [5] => Roma
            [6] => Italia
            [7] => 061234567
            [8] => 3351234567
            [9] => paolo@it.it
         )

    [1] => Array
        (
            [1] => Mario
            [2] => Rossi
            [3] => Piazza Venezia
            [4] => Milano
            [5] => Roma
            [6] => Italia
            [7] => 061234567
            [8] => 3351234567
            [9] => mario@it.it
         )

    [2] => Array
        (
            [1] => Roberto
            [2] => Bianchi
            [3] => Largo dei Caduti
            [4] => Montepulciano
            [5] => Siena
            [6] => Italia
            [7] => 061234567
            [8] => 3351234567
            [9] => roberto@it.it
         )
)

Se ho bisogno di rinominarle, usare una istruzione di questo tipo


$aConDescrizione=array();
foreach ($this->fileData as $key => $value)
{
	$aConDescrizione[$key] = array('NOME'      => $value['1'],
				       'COGNOME'   => $value['2'],
				       'INDIRIZZO' => $value['3'],
				       'CITTA'     => $value['4'],
				       'PROVINCIA' => $value['5'],
				       'NAZIONE'   => $value['6'],
				       'FISSO'     => $value['7'],
				       'CELLULARE' => $value['8'],
                                       'EMAIL'     => $value['9']);
}