archivo = $rutaArchivo; $this->extension = $extension; } /** * Devuelve un objeto Reader de la libreria PhpSpreadsheet que permite trabajar con el directamente * @return IReader Objeto reader */ public function getReader(){ $reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader($this->extension); //$reader = IOFactory::createReader($this->extension); return $reader; } /** * @return string Devuelve la extension del archivo. */ public function getExtension() { return $this->extension; } /** * Lee las celdas de la hoja de calculo y devuelve los valores en un array multidimensional * @param string $hoja Nombre de la hoja de la que se leeran los datos. En caso de no indicarse se utiliza la hoja activa. * @return array Array multidimensional. Cada sub-array representa una fila */ public function leerDatos( $hoja = '' ){ $reader = $this->getReader(); $ruta = $this->archivo; $reader->setReadDataOnly(true); $spreadsheet = $reader->load($ruta); if (empty($hoja)){ $worksheet = $spreadsheet->getActiveSheet(); }else{ $worksheet = $spreadsheet->getSheetByName($hoja) ; } $datos = array(); $datos = $worksheet->toArray(); $worksheet->disconnectCells(); $spreadsheet->disconnectWorksheets(); unset($worksheet); unset($spreadsheet); unset($reader); return $datos; } /** * Permite escribir sobre la hoja seleccionada de la hoja de calculo * @param array $arrayDatos Array multimensional que contiene los valores que se es escribiran en las celdas. * @param string $celdaInicio Indica a partir de que celda se comenzara la escritura. Por defecto A1 * @param string $hoja Indica en que hoja del archivo se escribira, por defecto la hoja activa. */ public function escribirDatos($arrayDatos, $celdaInicio='A1',$hoja = ''){ $ruta = $this->archivo; $extension = $this->extension; $spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load($ruta); //$spreadsheet = IOFactory::load($ruta); if (empty($hoja)){ $worksheet = $spreadsheet->getActiveSheet(); }else{ $worksheet = $spreadsheet->getSheetByName($hoja) ; } $worksheet->fromArray($arrayDatos,null,$celdaInicio); $writter = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, $extension); //$writter = IOFactory::createWriter($spreadsheet, $extension); $writter->save($ruta); $worksheet->disconnectCells(); $spreadsheet->disconnectWorksheets(); unset($spreadsheet); unset($worksheet); unset($writter); } /** * Permite añadir hojas nuevas al archivo. * @param string $nombre Nombre que tendra la nueva hoja. Si no se indica se utilizara el nomre por defecto. */ // * @param int $indice Indice donde se guardara la hoja. Por defecto se colocara la ultima. public function añadirHoja($nombre = ''){ $ruta = $this->archivo; $extension = $this->extension; //$spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load($ruta); $spreadsheet = IOFactory::load($ruta); $indice = null; //REVIEW Falla al introducir un indice, revisar cuando se actualice a la ultima version if (empty($nombre)){ $spreadsheet->createSheet($indice); }else { $worksheet = new \PhpOffice\PhpSpreadsheet\Worksheet\Worksheet($spreadsheet, $nombre); //$worksheet = new Worksheet($spreadsheet, $nombre); $spreadsheet->addSheet($worksheet, $indice); } $writter = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, $extension); //$writter = IOFactory::createWriter($spreadsheet, $extension); $writter->save($ruta); $spreadsheet->disconnectWorksheets(); unset($spreadsheet); unset($writter); } /** * Permite crear un fichero que contendra una hoja de calculo vacia * @param string $ruta Ruta donde se alojara el fichero, debe contener el nombre y la extension del fichero * @param string $extension Extension que tendra el fichero, sirve para determinar que tipo de hoja de calculo se creara. Por defecto 'Xlsx' * @param string $nombreHoja Nombre que tendra la hoja creada dentro del archivo. Por defecto 'Hoja 1' */ public static function crearHoja($ruta, $extension = 'Xlsx', $nombreHoja = 'Hoja 1'){ IgepHojaCalculo::cargarReferencias(); $spreadsheet = new \PhpOffice\PhpSpreadsheet\Spreadsheet(); //$spreadsheet = new Spreadsheet(); $spreadsheet->getActiveSheet()->setTitle($nombreHoja); $writter = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, $extension); //$writter = IOFactory::createWriter($spreadsheet, $extension); $writter->save($ruta); $spreadsheet->disconnectWorksheets(); } private static function cargarReferencias(){ //Cambiar solo si se utiliza el test require_once 'igep/include/vendor/Psr/autoloader.php'; require_once 'igep/include/vendor/PhpSpreadsheet/autoloader.php'; } }