Usando Php Excel en Joomla

Lo primero que debemos hacer es descargar la última versión de PhpExcel de la página oficial (http://phpexcel.codeplex.com/) luego de descargarla debemos descomprimirla en la carpeta de librerías de joomla

RUTA_A_JOOMLA/libraries

Donde RUTA_A_JOOMLA es la ruta donde está instalada joomla

En esta carpeta libraries copiamos la carpeta completa phpexcel.

Ahora para poder usar la librería en nuestra aplicación debemos incluir las clases necesarias, en este caso solo incluyo las más comunes que son las que usamos en el ejemplo si se requieren más pues se incluyen de la misma manera:

require_once( JPATH_SITE . DS . 'libraries' . DS . 'phpexcel' . DS . 'PHPExcel.php' );
require_once( JPATH_SITE . DS . 'libraries' . DS . 'phpexcel' . DS . 'PHPExcel' . DS. 'IOFactory.php' );


Ahora para cargar el archivo

$objPHPExcel = PHPExcel_IOFactory::load( “nombre_archivo.xls” );

O si queremos cargar un excel 2007

$objPHPExcel = PHPExcel_IOFactory::load( “nombre_archivo.xlsx” );

El nombre del archivo debe incluir la ruta desde la carpeta de instalación del Joomla, por ejemplo si el archivo esta dentro de Joomla en la carpeta files el nombre del archivo que cargamos es

“files” . DS . ”nombre_archivo.xls”

Ahora seleccionamos la hoja activa
$objWorksheet = $objPHPExcel->getActiveSheet();

Leemos por ejemplo la celda A5
$a5 = $objWorksheet->getCell(“A5”)->getValue();

Escribimos en la celda A10
$objWorksheet->getCell('A10')->setValue('Desde Php…');

Ahora simplemente guardamos los cambios
$objWriter = PHPExcel_IOFactory::createWriter( $objPHPExcel , 'Excel5');
$objWriter->save( 'write.xls');


IMPORTANTE: Si estas usando phpexcel versión 1.7.2 o superior se va a presentar un problema debido a un conflicto en las funciones autoload( la cual es la encargada de cargar las clases de PHP en el momento en que las usemos) el problema radica en que phpexcel reescribe la función autoload de Joomla por lo tanto debemos hacer lo siguiente:

Buscar el archivo RUTA_A_JOOMLA/libraries/loader.php

En este archivo debemos poner en comentarios la función autoload y escribir una nueva la cual llamé __Jautoload y luego de esto la registramos en las librerías de php con las dos instrucciones del final y listo!. Bueno esta solución no es muy recomendada porque reescribimos una clase del core de Joomla pero mientras encontramos una solución más elegante podemos usar esta, si alguien encuentra una forma de hacerlo mejor nos la puede compartir para actualizar el documento.


/**
* When calling a class that hasn't been defined, __autoload will attempt to
* include the correct file for that class.
*
* This function get's called by PHP. Never call this function yourself.
*
* @param string $class
* @access public
* @return boolean
* @since 1.5
*/
/*
function __autoload($class)
{
if(JLoader::load($class)) {
return true;
}
return false;
}
*/

function __Jautoload($class)
{
if(JLoader::load($class)) {
return true;
}
return false;
}

/*** specify extensions that may be loaded ***/
spl_autoload_extensions('.php, .class.php, .lib.php');
/*** register the loader functions ***/
spl_autoload_register('__Jautoload');





Comentarios

Anónimo dijo…
Hola, buenas tardes.. estoy tratando de seguir estos pasos porque tengo problema al usar phpEcxel con joomla.. pero me da error.. no me corre el proyecto.. esas dos ultima lineas donde deben estar??

/*** specify extensions that may be loaded ***/
spl_autoload_extensions('.php, .class.php, .lib.php');
/*** register the loader functions ***/
spl_autoload_register('__Jautoload');

Entradas populares