| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 | 
							- <?php
 
- require_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;
 
- 	}
 
- }
 
- ?>
 
 
  |