Urielmania

“El Mundo de Uriel… Pero la voz de todos”

Exportar los datos de tus tablas Mysql con PHPExcel + CodeIgniter

Cuando trabajamos con tablas Mysql una de las cosas que necesitamos aparte de lo obvio,  mostrar los resultados, es la de tener una manera facil de descargar los datos de las mismas, si bien lo comun es descargar un csv o dejar encabezados en la tabla pura para la descarga en formato xls, lo cierto es que para el cliente final esto aveces no es bonito o mejor dicho no es transparente, por tal motivo hay que explorar otras maneras y una de las que mas me gusto fue con la libreria PHPExcel.

PHPExcel es un conjunto de clases PHP/Biblioteca  para leer y escribir archivos de Excel (.xls / .xlsx) muy eficiente y facil de usar,  pero para usarla dentro de CodeIgniter se necesitan algunas modificaciones en el código fuente para que esta pueda ser ejecutada.

  • descargar PHPExcel lo puedes hacer desde  https://github.com/PHPOffice/PHPExcel
  • Extraer el archivo comprimido y copiar la carpeta Classes en el directorio de codeigniter  application/third_party/
  • Crear un Archivo PHP dentro de la libreria de tu CI application/libraries/ con el nombre que gustes en este caso  PHPExcel.php con el siguiente contenido:

    <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
    /* 
     *  ======================================= 
     *  Author     : Muhammad Surya Ikhsanudin 
     *  License    : Protected 
     *  Email      : [email protected] 
     *   
     *  Dilarang merubah, mengganti dan mendistribusikan 
     *  ulang tanpa sepengetahuan Author 
     *  ======================================= 
     */  
    require_once APPPATH."/third_party/PHPExcel.php"; 
     
    class Excel extends PHPExcel { 
        public function __construct() { 
            parent::__construct(); 
        } 
    }
  • Y listo ya tienes tu libreria funcionando

Para poder hacer la exportacion de los datos de la  tabla puedes basarte en el siguiente controlador:

classTable_export extendsController {
    function__construct()
    {
        parent::Controller();
        // Here you should add some sort of user validation
        // to prevent strangers from pulling your table data
    }
    functionindex($table_name)
    {
        $query= $this->db->get($table_name);
        if(!$query)
            returnfalse;
        // Starting the PHPExcel library
        $this->load->library('PHPExcel');
      
        $objPHPExcel= newPHPExcel();
        $objPHPExcel->getProperties()->setTitle("export")->setDescription("none");
        $objPHPExcel->setActiveSheetIndex(0);
        // Field names in the first row
        $fields= $query->list_fields();
        $col= 0;
        foreach($fieldsas$field)
        {
            $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow($col, 1, $field);
            $col++;
        }
        // Fetching the table data
        $row= 2;
        foreach($query->result() as$data)
        {
            $col= 0;
            foreach($fieldsas$field)
            {
                $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow($col, $row, $data->$field);
                $col++;
            }
            $row++;
        }
        $objPHPExcel->setActiveSheetIndex(0);

       

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
        // Sending headers to force the user to download the file
        header('Content-Type: application/vnd.ms-excel');
        header('Content-Disposition: attachment;filename="Products_'.date('dMy').'.xls"');
        header('Cache-Control: max-age=0');
        $objWriter->save('php://output');
    }
}

Acerca del Autor