Foros del Web » Programando para Internet » PHP » Zend »

createExcelFromArray

Estas en el tema de createExcelFromArray en el foro de Zend en Foros del Web. Foreros cuantas veces han tenido que crear exceles apartir de una base de datos y seamos honestos cuantos lo han hecho como se debe con ...
  #1 (permalink)  
Antiguo 15/03/2014, 23:28
Avatar de thedaket  
Fecha de Ingreso: junio-2011
Mensajes: 55
Antigüedad: 12 años, 9 meses
Puntos: 3
Sonrisa createExcelFromArray

Foreros cuantas veces han tenido que crear exceles apartir de una base de datos y seamos honestos cuantos lo han hecho como se debe con PHPExcel y por flojera hacemos una vista con tabla html foreacheamos y después usar unos headers para pasarlo a xls xD

Si la comunidad lo puede mejorar que bien :DD

Ok eso esta mal les dejo un método para evitar eso y crear un a partir de un array un bonito excel de múltiples hojas

Enjoy the method :P

Código PHP:
<?php

public static function createExcelFromArray($dataExcel$titulo_excel null$descripcion null$owner null$file null) {
        
$objPHPExcel = new PHPExcel();
        if (!empty(
$owner)) {
            
$objPHPExcel->getProperties()->setCreator($owner);
        } else {
            
$objPHPExcel->getProperties()->setCreator("Creador");
        }

        if (!
is_null($titulo_excel)) {
            
$objPHPExcel->getProperties()->setTitle($titulo_excel);
        }

        if (!empty(
$descripcion)) {
            
$objPHPExcel->getProperties()->setDescription($descripcion);
        }

        
$objPHPExcel->getDefaultStyle()->getFont()->setName('Tahoma');
        
$objPHPExcel->getDefaultStyle()->getFont()->setSize(10);

        foreach (
$dataExcel AS $hoja => $datos) {

            if (
$hoja 0) {
                
$objPHPExcel->createSheet($hoja);
            }

            
$objPHPExcel->setActiveSheetIndex($hoja); //numero de hoja
            
$objPHPExcel->getActiveSheet()->setTitle(($datos['titulo'] === '' || is_null($datos['titulo']) ? 'Hoja ' . ($hoja 1) : $datos['titulo']));

            
$columna 0;
            foreach (
$datos['headers'] as $index => $titulo) {
                
$objPHPExcel->getActiveSheet()->getColumnDimensionByColumn($columna)->setAutoSize(true);
                
$objPHPExcel->getActiveSheet()->getStyleByColumnAndRow($columna1)->getFont()->setBold(true);
                
$objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow($columna++, 1$titulo);
            }
            
$fila 2;
            
$columna 0;
            foreach (
$datos['data'] as $value) {
                foreach (
$datos['headers'] as $index => $title_header) {
                    
$objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow($columna++, $fila$value[$index]);
                }
                
$columna 0;
                
$fila++;
            }
        }
        
$objPHPExcel->setActiveSheetIndex(0);
        
$objWriter PHPExcel_IOFactory::createWriter($objPHPExcel'Excel2007');

        if (empty(
$file)) {
            
$objWriter->save('php://output');
        } else {
            
$objWriter->save($file);
        }
    }
Y su uso quedaría de la siguiente forma:

Código PHP:
<?php

$dataExcel 
= array(
            array(
            
'headers' => array(
                 
'cabecera_1' => 'Título 1',
                 
'cabecera_2' => 'Título 2',
                 
'cabecera_3' => 'Título 3'
               
),
            
'data' => $array_db_1,
            
'titulo' => 'Hoja 1'),

            array(
            
'headers' => array(
                 
'cabecera_1' => 'Título 1',
                 
'cabecera_2' => 'Título 2',
                 
'cabecera_3' => 'Título 3'
             
),
            
'data' => $array_db_2,
            
'titulo' => 'Hoja 2')
        );

        
header("Content-Type:   application/vnd.ms-excel; charset=utf-8");
        
header("Content-type:   application/x-msexcel; charset=utf-8");
        
header("Content-Disposition: attachment; filename=estadisticas-campanas-" $cliente "_" time() . ".xls");
        
header("Expires: 0");
        
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
        
header("Cache-Control: private"false);


        echo 
Tools::createExcelFromArray($dataExcel'Nuestro titulo');
__________________
Sí AJAX quieres usar jQuery debes agregar...

Etiquetas: arrays, create, excel, phpexcel
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:57.