CodeIgniter – Exportar a excel con librería PHPExcel

A la hora de hacer nuestras aplicaciones con CodeIgniter, puede surgir la necesidad de exportar los resultados de una consulta a Excel. Para ello, os detallo los pasos para instalar la librería necesario, y un pequeño ejemplo de creación de un excel que se descarga… Empecemos con artículo CodeIgniter – Exportar a excel con librería PHPExcel

Lo primero que haremos es descargar la librería PHPExcel que encontraréis en el siguiente enlace:

La tenéis ya? Lo descomprimis en una carpeta, y el contenido que hay en la carpeta Classes, lo copias en la carpeta /application/third_party, por lo que os quedará de la siguiente manera:

// Carpeta /application/third_party
[PHPExcel]
PHPExcel.php
index.html

Primera parte realizada. Segundo paso, ahora que tenemos la librería descargada en la carpeta third_party, pasamos a crear nuestra propia librería para poder utilizarla. Creamos el fichero Excel.php dentro de la carpeta libreries:

// Contenido fichero /application/libreries/Excel.php 
<?php 
if ( ! defined('BASEPATH')) exit('No direct script access allowed');   
/*  
 * Clase para la exportación de resultados a excel  
 * @version 0.1 Primera version  
 */ 
require_once APPPATH ."/third_party/PHPExcel.php";   
class Excel extends PHPExcel {     
  public function __construct(){         
    parent::__construct();      
  } 
} 
?>

Como podéis observar, lo único que hace es un extend de la librería sin modificar nada, por lo que podremos utilizar esta librería como si fuera la original sin problemas.

Vamos a poner el tercer y penúltimo paso: crear el controlador. Vamos a hacer un ejemplo que sólo crea un excel con poco contenido y obliga a descargarlo.

<?php
// Contenido del fichero /application/controllers/jugadores.php 
defined('BASEPATH') OR exit('No direct script access allowed');   
class Jugadores extends CI_Controller {       
  public function __construct(){ 
    parent::__construct();         
    // Models         
    ...         
    // Libraries         
    $this--->load->library('excel');
  }

  ...       

  public function exportar2excel(){
    $this->excel->setActiveSheetIndex(0);         
    $this->excel->getActiveSheet()->setTitle('test worksheet');         
    $this->excel->getActiveSheet()->setCellValue('A1', 'Un poco de texto');         
    $this->excel->getActiveSheet()->getStyle('A1')->getFont()->setSize(20);         
    $this->excel->getActiveSheet()->getStyle('A1')->getFont()->setBold(true);         
    $this->excel->getActiveSheet()->mergeCells('A1:D1');           

    header('Content-Type: application/vnd.ms-excel');         
    header('Content-Disposition: attachment;filename="nombredelfichero.xls"');
    header('Cache-Control: max-age=0'); //no cache         
    $objWriter = PHPExcel_IOFactory::createWriter($this->excel, 'Excel5');         
    
    // Forzamos a la descarga         
    $objWriter->save('php://output');
  }

  ...
}

Como habéis podido observar, el controlador llama a la librería que nosotros hemos creado, y con ella se crea una función que genera el excel a descargar. Atentos que en el código de ejemplo he puesto puntos suspensivos porqué indico que ahí puede ir más código.

Y ya por último, sólo nos queda llamar desde una vista a la función del controlador para que genere el excel:

// Contenido fichero /application/views/jugadores.php
...
<a href="<?php echo base_url(); ?>jugadores/exportar2excel" target="_blank">Descargar excel</a>
...

Ahora el primer paso de crear el excel y descargarlo en CodeIgniter ya lo sabéis, ahora es cosa vuestra rellenar ese excel con el contenido que queráis…

Espero que os haya sido de utilidad el artículo CodeIgniter – Exportar a excel con librería PHPExcel.


Más información