Si bien no deberían ir en esta clase la parte de manejos de Arreglos se los dejo aqui para que tengan una mejor idea de como se puede utilizar.
Consideraciones:
Tener en cuenta que como carga el Excel a un Arreglo no es recomendable para archivos excel de muchos datos.
Los datos deben comenzar en la Columna A – Fila 1
El archivo excel deberá contener en la primera fila los encabezados o títulos y de ser posible se deberá otorgar una columnas en donde sus datos sean únicos (no se repitan), que serán usados como claves.
La mas importante de todas es que hace uso de la Libreria PHPExcel de Codeplex, por lo cual deberan hacer los requiere correspondientes.
Ahora un poco de codigo:
Código PHP:
Ver original
<?php // Lanza todos los errores // Tiempo ilimitado para el script require_once 'PHPExcel/Classes/PHPExcel.php'; require_once 'PHPExcel/Classes/PHPExcel/IOFactory.php'; class ExcelToArray { /** * Contiene Las Extenciones Permitidas para Excel. * @var Array */ 'xls' => 'Excel5'); /** * Contiene la Cantidad de Columnas del Archivo Excel. * @var integer */ private $_columnas = 0; /** * Contiene la Cantidad de Filas del Archivo Excel. * @var integer */ private $_filas = 0; /** * Contiene el Titulo que sera el Identificador. * @var string */ private $_id; /** * Contiene el Arreglo Generado a partir del Excel. * @var array */ /** * Contiene los Encabezados del Archivo Excel. * @var array */ /** * Contiene la ruta y nombre del Archivo. * @var type */ private $_file; /** * Contiene el Tipo del Archivo Excel para PHPExcel. * @var string */ private $_tipoPHPExcel; /** * Constructor de Clase. * @param string $file Ruta y nombre del Archivo. * @throws Exception Lanza exepcion si el archivo no existe o si, * no es de una extencion valida. */ public function __construct($file) { throw new Exception('Error : El archivo no pudo ser Encontrado'); } $this->_file= $file; throw new Exception('Error : El archivo no es de un tipo Valido'); } $this->_tipoPHPExcel = $this->_tipoExcel[$ext]; } /** * Carga la Hoja Excel y Retorna el Arreglo. * @param string $id Contiene el nombre del encabezado que sera tomado como Id. * Si no se proporciona o no existe sera la primera columnas. * @return array */ public function loadExcel($id = '') { // Creo un objeto de Lectura con el tipo de Archivo Correcto Excel20007(xlsx), Excel5(xls) $objReader = PHPExcel_IOFactory::createReader($this->_tipoPHPExcel); // Configuro que sera solo para leer el archivo $objReader ->setReadDataOnly(true); // Cargo el Archivo $objPHPExcel = $objReader->load($this->_file); $objWorksheet = $objPHPExcel->getActiveSheet(); $this->_columnas= PHPExcel_Cell::columnIndexFromString($objWorksheet->getHighestColumn()); $this->_filas = $objWorksheet->getHighestRow(); // Extraigo los Titulos for ($i=0; $i<= $this->_columnas-1; $i++) { $this->_titulos[$i] = $objWorksheet->getCellByColumnAndRow($i, 1)->getCalculatedValue(); } // Verifica el Campo Identificador // Levanto todos los Datos for ($fila = 2; $fila <= $this->_filas; $fila++) { for ($columna = 0; $columna <= $this->_columnas-1; $columna++) { $dFilas[$this->_titulos[$columna]] = $objWorksheet->getCellByColumnAndRow($columna, $fila)->getCalculatedValue(); } $this->_excel[$dFilas[$this->_id]] = $dFilas; } return $this->_excel; } /** * Retorna el Campo seleccionado como Identificador. * @return string */ public function getId() { return $this->_id; } /** * Retorna la Cantidad de Columnas del Archivo Excel. * @return integer */ public function countColumns() { return $this->_columnas; } /** * Retorna la Cantidad de Filas del Archivo Excel. * @return integer */ public function countRows() { return $this->_filas; } /** * Retorna si una Columna Existe o no. * @param string $nombreColumna Nombre de la columna. * @return boolean */ public function isColumn($nombreColumna) { } /** * Retorna el Arreglo Generado. * @return array */ public function getArray() { return $this->_excel; } /** * Retorna el registro para el id establecido. * @param string $id Nombre del Identificador. * @return array */ public function findId($id) { $retorno = false; $retorno = $this->_excel[$id]; } return $retorno; } /** * Retorna un arreglo con el valor buscado en la columna indicada. * Busqueda Exacta. * @param string $titulo Titulo de la Columna * @param string $valor Valor a buscar * @return array */ public function findByColumn($titulo, $valor) { return $this->_search($this->_excel, $titulo, $valor); } /** * Extraida de : * @link http://php.net/manual/es/function.array-search.php */ private function _search($array, $key, $value) { $results[] = $array; } foreach ($array as $subarray) { } } return $results; } /** * Retorna un arreglo con el valor buscado en la columna indicada o no y la cantidad * de veces que aparece el valor en las columnas si no se indica la misma. * La busqueda es por valor aproximado. * @param string $buscar Valor a Buscar * @param string $calve Titulo de La columna donde se buscara o nada por Cualquiera. * @return array */ public function findByCount($buscar, $titulo = null) { return $this->_recursiveArraySearchAll($this->_excel, $buscar, $titulo); } /** * Extraida de : * @link http://php.net/manual/es/function.array-search.php */ private function _recursiveArraySearchAll($haystack, $needle, $index = null) { $arrIterator = new RecursiveArrayIterator($haystack); $recIterator = new RecursiveIteratorIterator($arrIterator); while($recIterator->valid()) { } } } return $resultkeys; } /** * Metodo ordenar. * Ordena los resultados de acuerdo a la clave elegida. * @param string $clave Clave por la cual se quiere ordenar(titulo de columna). * @param boolean $asc true para ascendente, false para descendente. * @return array */ { throw new Exception('Primero debe usar la funcion loadExcel'); } $ascDesc = ($asc)? SORT_ASC : SORT_DESC; $caracter = 0; foreach ($this->_excel as $ordenado) { $tmpArray[] = $ordenado[$ordenarPor]; } $numero = ($caracter)? SORT_STRING : SORT_NUMERIC; return $this->_excel; } }