Como integrar PHPExcel en Cakephp 2.x

Hola de nuevo,  en esta oportunidad les explicare como integrar PHPExcel con Cakephp en su versión 2.x ,  en  versiónes  anteriores como la 1.2 y la 1.3  de este framework  cambia la forma como se importa la libreria a través del vendor, pero básicamente es el mismo funcionamiento.

Lo primero:

Descargaremos la Liberia PHPExcel.

Descomprimimos el contenido en el directorio Vendor de nuestra aplicación.

\Vendor\Classes\PHPExcel.php

Crearemos el  acción dentro de nuestro controlador  que será llamada para  generar el archivo Excel descargable, supongamos que necesitamos generar un Excel con la lista de todos los post o usuarios de nuestra aplicación, el código seria el siguiente hay que tener en cuenta que  el layout que utilizo es el de Ajax.

 

   public function excel (){
       $this->layout='excel';
           $this->Post->recursive = 0;
       $this->set('posts', $this->paginate());
         
   } 

 

En la vista de nuestra acción ingresaremos lo siguiente.

 

 <?php

// Importamos la clase PHPExcel
App::import('Vendor', 'Classes/PHPExcel');
       
$objPHPExcel = new PHPExcel();

$objPHPExcel->getProperties()->setCreator("Carlos Hernan Aguilar")
                             ->setLastModifiedBy("Carlos Hernan Aguilar")
                             ->setTitle("Office 2007 XLSX Test Document")
                             ->setSubject("Office 2007 XLSX Test Document")
                             ->setDescription("Ejemplo de integracion cakephp 2.x y phpExcel.")
                             ->setKeywords("office 2007 openxml php")
                             ->setCategory("Test result file");


//agregamos los datos
$i=1;
foreach ($posts as $post){
 
  $objPHPExcel->setActiveSheetIndex(0)
              ->setCellValue('A'.$i++, $post['Post']['title']);
}

$objPHPExcel->getActiveSheet()->setTitle('Ejemplo CakePHP & PHPExcel');
$objPHPExcel->setActiveSheetIndex(0);

header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="ejemplo.xlsx"');
header('Cache-Control: max-age=0');

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save('php://output');
exit;
?>

 

Probando todo el resultado nos debería haber generado.

 

De esta manera generamos archivos excel con la libreria PHPExcel en cakePHP 2.x sin utilizar helper para tal fin, espero les sea de utilidad.

 

 

    Hola carlos hernan gracias por el manual estere mas pendiente de esta web para futuros tips que pueda aprender

    El archivo generado esta da;ado o no se reconoce su extension :S

    Hola, primero gracias por visitar mi web ahora el error que se presentando es al momento de generar el archivo en ejemplo estaba mal una linea que era la siguiente $objWriter=PHPExcel_IOFactory::createWriter($objPHPExcel,'ejemplo1'); la forma correcta seria $objWriter=PHPExcel_IOFactory::createWriter($objPHPExcel,'Excel2007'); una ves realices la modificación debería funcionar, cualquier cosas me cuentas estoy pendiente.

    Hola !! Quería saber si esta librería se puede aplicar a otros Excel, ya sea 2010 o 2013, ya que probé la librería y me arrojo un error en la vista, yo tengo Excel 2013.. Gracias

    La he trabajado hasta la versión 2007, te recomiendo visitar el portal oficial para mayor información.

    mira estuve mirando tu trabajo con esta librería me pareció excelente quisiera hacerte un pregunta tal vez me puedas orientar, mira quiero realizar una aplicación donde pueda importar archivos de Excel al igual que se pueda luego editarlos en una tabla de base de datos cualquier ayuda este muy agradecido

    Muchas gracias. El código funciona a la perfección. Lo adapte a mi proyecto y funciono al primer intento.

    Hola!! disculpa me podrías ayudar y darme alguna referencia de como mandar a exportar todos mis datos de una tabla de una solo vez, por favor estoy estancada ahí, soy nueva en esto.

    la pregunta es un poco generica asi que voy a hacer un ejemplo. digamos que tienes un modelo con los datos de tu tabla, con su respectiva clase --en el controlador-- public function fncExcel ($id = null){ //obtenemos los datos a exportar $data = $this->mi_clase->find('all'); $this->set('mi_Variable_en_la_vista', $data); $this->mi_clase->excel; } //luego en la vista <?php // Importamos la clase PHPExcel App::import('Vendor', 'Classes/PHPExcel'); $objPHPExcel = new PHPExcel(); $objPHPExcel->getProperties()->setCreator("Carlos Hernan Aguilar") ->setLastModifiedBy("Carlos Hernan Aguilar") ->setTitle("Office 2007 XLSX Test Document") ->setSubject("Office 2007 XLSX Test Document") ->setDescription("Ejemplo de integracion cakephp 2.x y phpExcel.") ->setKeywords("office 2007 openxml php") ->setCategory("Test result file"); //agregamos los datos /************* aqui cambia ******************/ $i=1; $letras="abcdefghijklmnopqrstuvwxyz"; $j=$indice; foreach ($posts as $post){ $j=0; foreach( aqui recorremos las filas){ $objPHPExcel->setActiveSheetIndex(0) ->setCellValue($letras[j].$i++, $post['Post']['title']); $j++; } } /************* fin aqui cambia ******************/ $objPHPExcel->getActiveSheet()->setTitle('Ejemplo CakePHP & PHPExcel'); $objPHPExcel->setActiveSheetIndex(0); header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); header('Content-Disposition: attachment;filename="ejemplo.xlsx"'); header('Cache-Control: max-age=0'); $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); $objWriter->save('php://output'); exit; ?> ahora tienes que adaptar tu script para que funcione con tus datos. para llenar el excel se hace como si fuera una matriz

    Pues básicamente esa es la forma de trabajarlo

    para mostrar una matriz basta conmodificar el bucle de la vista. $i=1; foreach ($consultas as $consulta){ $objPHPExcel->setActiveSheetIndex(0) ->setCellValue('A'.$i, $consulta['Consulta']['id']) ->setCellValue('B'.$i, $consulta['Consulta']['codigo']); $i = $i+1; }

    Muchas gracias.

    Amigo me podrias ayudar con que funcion, puede orientar mi texto a 90 grados, estoy leyendo el manual pero no ubico la funcion h hola o l a de antemano gracias.

    Que requerimiento mas loco pero en fin voy a investigar el tema

    Buenos dias. Me podrias orientar sobre como adaptar PHPExcel para CakePhp 3.x.x. Soy primeriso en cakephp pero estoy atascado en esto de generar un reporte en excel. Gracias

Añadir nuevo comentario

Resumen Firma

Carlos Hernan Aguilar Hurtado

Desarrollador WEB

Hola,Soy ingeniero informático radicado en la ciudad de Santiago de Cali orientado al trabajo con soluciones WEB, apasionado por la tecnología siempre en la búsqueda de herramientas y alternativas para mejorar el resultado de los objetivos que se presentan con el día a día.

Carlos Hernan Aguilar Hurtado