| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 | <?phprequire_once(__DIR__.SLASH.'CsvImport.class.php');class XlsxImport extends CsvImport{	public $mime = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';	public $extension = 'xlsx';	public $description = 'Fichier tableur excel enrichis';	public $meta = array();	/* convertis le fichier en tableau lignes / colonnes    	Le tableau final doit avoir la forme : 	array(   <-- excel		array(  <-- ligne			array(  <-- cellule				'value' => '' <-- valeur cellule				'color' => '' <-- propriété optionelle "couleur" (ou autre)			)		)	)    */	public  function toArray($file){				//on prend l'onglet 1 si aucun onglet configuré		$sheetIndex = isset($this->meta) && isset($this->meta['worksheet']) && is_numeric($this->meta['worksheet']) ? $this->meta['worksheet']-1 : 0;		$sheetIndex = $sheetIndex<0 ? 0 : $sheetIndex;        $rows = Excel::parse($file,false,$sheetIndex,false);                 $emptyLines = 0;        $finalArray = array();        if(!is_array($rows)) $rows = array();        		foreach($rows as $line){			//si + de 10 lignes vides on arrette de lire (evite les excels sans fin)			if($this->emptyLine($line,true)) $emptyLines++;			if($emptyLines>10) break;			$finalLine = array();			foreach($line as $cell){				$cell = str_replace("\n","<br>",$cell);				$finalLine[]= array('value'=>$cell);			}			$finalArray[] = $finalLine;		}				return $finalArray;	}	//vérifie si une ligne est a vide ou non	public function emptyLine($line,$raw = false){		if($raw) return str_replace(array(';',' ',"\t","\n","\r"),'',$line) == '';		$oneFilled = false;		foreach($line as $cell){			if( $this->emptyCell($cell)  ) continue;			$oneFilled = true;			break;		}		//if($oneFilled){						//foreach($line as $cell){			//	var_dump($cell['value'],$this->emptyCell($cell));			//}		//}		return !$oneFilled;	}	//vérifie si une cellule est a vide ou non	public function emptyCell($cell){		$val = str_replace(array(';',' ',"\t","\n","\r"),'',$cell['value']);		//1900-01-18 00:00:00 compoense le bug de SimpleXLSX qui detecte 1900-01-18 00:00:00 sur une cellule vide de type date		return $val == '' || $val =='1970-01-01 00:00:00';	}	//Déduction du type d'une celleule a partir de sa valeur	public function cellType($headerCell,$valueCell){		return parent::cellType($headerCell,$valueCell);	}	//Réglages spécifiques a ce modèle d'import	public function settings(){				$fields = array();		$fields = array(			'worksheet' => array(				'type' => 'integer',				'legend' => 'Optionnel (defaut: 1)',				'label' => 'Numéro de l\'onglet a importer'			)		);		return $fields;	}}?>
 |