Crear un reporte en Excel con PHP y MySQL

En este post les trigo un ejemplo para crear un reporte en Excel con PHP y una base de datos MySQL, la librería que se va a utilizar es PHPExcel.

PHPExcel

PHPExcel es una librería escrita en PHP  integrada por un conjunto de clases que permiten escribir y leer diferentes formatos de archivos de hojas de cálculo  como .xls, . xlsx, .csv,  .ods, PDF, HTML, … Este proyecto se basa en el estándar OpenXML Microsoft y PHP.

Pagina Oficial y descarga

¿En qué consiste el ejemplo?

El ejemplo va a consistir en extraer de la base de datos una lista de alumnos ordenados por carrera, los cuales serán presentados en una hoja de cálculo de Excel y se les aplicará formato a las celdas(Fuente, tamaño, alineación, bordes, relleno, etc). Bueno ahora que sabemos que es lo que vamos a hacer podemos comenzar.

Base de datos


CREATE TABLE IF NOT EXISTS `repexcel`.`alumno` (
 `numcontrol` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
 `paterno` VARCHAR(15) NOT NULL ,
 `materno` VARCHAR(55) NOT NULL ,
 `nombre` VARCHAR(15) NOT NULL ,
 `sexo` ENUM('F','M') NOT NULL ,
 `fechanac` DATE NOT NULL ,
 `idcarrera` INT UNSIGNED NOT NULL ,
 PRIMARY KEY (`numcontrol`) ,
 INDEX `fk_alumno_carrera_idx` (`idcarrera` ASC) ,
 CONSTRAINT `fk_alumno_carrera`
 FOREIGN KEY (`idcarrera` )
 REFERENCES `repexcel`.`carrera` (`idcarrera` )
 ON DELETE NO ACTION
 ON UPDATE NO ACTION)
ENGINE = InnoDB

CREATE TABLE IF NOT EXISTS `repexcel`.`carrera` (
 `idcarrera` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
 `carrera` VARCHAR(50) NOT NULL ,
 PRIMARY KEY (`idcarrera`) )
ENGINE = InnoDB

 

Archivo HTML

Con lo que voy a comenzar es creando un archivo HTML en el cual solo voy a colocar un título y un hipervínculo para descargar el reporte.


<!DOCTYPE html>
<html>
   <head>
      <meta charset="utf-8" />
      <title>Reporte de excel con PHP y MySQL</title>
   </head>
   <body>
      <div>
        <header>
           <h1>REPORTE DE EXCEL CON PHP Y MYSQL</h1>
        </header>
        <div>
           <a href="reporteexcel.php"> Haz clic para descargar el reporte</a>
        </div>
      </div>
   </body>
</html>

Archivo PHP

Ahora toca el turno de crear el archivo PHP que se va a encargar de generar el reporte, voy a ir explicando el contenido de este archivo poco a poco.

Lo primero es crear la conexión a la base de datos y verificar si se pudo conectar al servidor de lo contrario el programa terminaría hasta aquí y mandaría el error.


$conexion = new mysqli('localhost','usuario','password','basedatos',3306);
if (mysqli_connect_errno()) {
   printf("La conexión con el servidor de base de datos falló: %s\n", mysqli_connect_error());
   exit();
}

Una vez que se realizó la conexión al servidor de base de datos procedemos a ejecutar la consulta de selección para obtener los datos del reporte.


$consulta = "SELECT concat(paterno,' ', materno, ' ' , nombre) AS alumno, fechanac, sexo, carrera FROM alumno ";
$consulta .= " INNER JOIN carrera ON alumno.idcarrera = carrera.idcarrera ORDER BY carrera, nombre";

$resultado = $conexion->query($consulta);

Lo siguiente es verificar que la consulta obtuvo los registros a mostrar y lo hacemos con la siguiente condición, si el número de registros es mayor que 0 quiere decir que si se obtuvieron datos por lo tanto procedemos a crear el reporte.

if($resultado->num_rows > 0 ){

Lo primero que hacemos es definir la zona horaria, debido a que vamos a trabajar con datos de tipo fecha y luego manda un error si no tenemos asignada una zona horaria, en este caso voy a asignar la de la ciudad de México, puedes consultar los datos de la zona horaria desde aquí: Listado de zonas horarias.

date_default_timezone_set('America/Mexico_City');

La siguiente línea determina si se está accediendo al archivo vía HTTP o CLI(command line interface), el archivo solo se va a mostrar si se accede desde un navegador web(HTTP).


if (PHP_SAPI == 'cli')
    die('Este archivo solo se puede ver desde un navegador web');

Ahora si comenzamos a armar el reporte de Excel


/** Se agrega la libreria PHPExcel */
 require_once 'lib/PHPExcel/PHPExcel.php';

// Se crea el objeto PHPExcel
 $objPHPExcel = new PHPExcel();

Comenzamos agregando las propiedades del archivo de Excel, estas las podemos ver una vez que se haya guardado el archivo haciendo “Clic derecho > Propiedades > Detalles”


// Se asignan las propiedades del libro
$objPHPExcel->getProperties()->setCreator("Codedrinks") // Nombre del autor
    ->setLastModifiedBy("Codedrinks") //Ultimo usuario que lo modificó
    ->setTitle("Reporte Excel con PHP y MySQL") // Titulo
    ->setSubject("Reporte Excel con PHP y MySQL") //Asunto
    ->setDescription("Reporte de alumnos") //Descripción
    ->setKeywords("reporte alumnos carreras") //Etiquetas
    ->setCategory("Reporte excel"); //Categorias

Para los títulos del reporte voy a crear dos variables, de esta forma es un poco más fácil realizar algunos cambios si es que el reporte fuera muy extenso.

$tituloReporte = "Relación de alumnos por carrera";
$titulosColumnas = array('NOMBRE', 'FECHA DE NACIMIENTO', 'SEXO', 'CARRERA');

El reporte como ya se habrán dado cuenta va a tener solo 4 columnas: Nombre, Fecha de nacimiento, sexo y carrera. Por lo tanto solo vamos a ocupar hasta la columna D.

// Se combinan las celdas A1 hasta D1, para colocar ahí el titulo del reporte
$objPHPExcel->setActiveSheetIndex(0)
    ->mergeCells('A1:D1');

// Se agregan los titulos del reporte
$objPHPExcel->setActiveSheetIndex(0)
    ->setCellValue('A1',$tituloReporte) // Titulo del reporte
    ->setCellValue('A3',  $titulosColumnas[0])  //Titulo de las columnas
    ->setCellValue('B3',  $titulosColumnas[1])
    ->setCellValue('C3',  $titulosColumnas[2])
    ->setCellValue('D3',  $titulosColumnas[3]);

Como pueden apreciar para asignar contenido a una celda se selecciona primero la hoja con setActiveSheetIndex(Indice de hoja) y después con setCellValue(celda, valor) asignamos el contenido a la celda deseada.

Ahora procedemos a rellenar las columnas con la información de los alumnos, para ello vamos a recorrer el resultado utilizando un while, las celdas se van a rellenar de forma parecida al paso anterior solo que aquí para indicar el número de fila se va a utilizar una variable que se va a estar incrementando cada vez que se rellene la información de un alumno.


//Se agregan los datos de los alumnos

 $i = 4; //Numero de fila donde se va a comenzar a rellenar
 while ($fila = $resultado->fetch_array()) {
     $objPHPExcel->setActiveSheetIndex(0)
         ->setCellValue('A'.$i, $fila['alumno'])
         ->setCellValue('B'.$i, $fila['fechanac'])
         ->setCellValue('C'.$i, $fila['sexo'])
         ->setCellValue('D'.$i, $fila['carrera']);
     $i++;
 }

Hasta este punto ya se tiene el archivo con los datos ahora procedemos a aplicar el formato a las celdas. Para ello vamos a crear 3 variables, la primera va a contener el estilo del título del reporte, la segunda el estilo del título de las columnas y la tercera el estilo de la información de los alumnos.

$estiloTituloReporte = array(
    'font' => array(
      	'name'      => 'Verdana',
        'bold'      => true,
        'italic'    => false,
        'strike'    => false,
      	'size' =>16,
      	'color'     => array(
      	    'rgb' => 'FFFFFF'
        )
    ),
    'fill' => array(
    	'type'	=> PHPExcel_Style_Fill::FILL_SOLID,
    	'color'	=> array(
            'argb' => 'FF220835')
	),
    'borders' => array(
      	'allborders' => array(
       	    'style' => PHPExcel_Style_Border::BORDER_NONE
        )
    ),
    'alignment' => array(
        'horizontal' => PHPExcel_Style_Alignment::HORIZONTAL_CENTER,
        'vertical' => PHPExcel_Style_Alignment::VERTICAL_CENTER,
        'rotation' => 0,
        'wrap' => TRUE
    )
);

$estiloTituloColumnas = array(
    'font' => array(
        'name'  => 'Arial',
        'bold'  => true,
        'color' => array(
            'rgb' => 'FFFFFF'
        )
    ),
    'fill' => array(
        'type'	     => PHPExcel_Style_Fill::FILL_GRADIENT_LINEAR,
	'rotation'   => 90,
        'startcolor' => array(
            'rgb' => 'c47cf2'
        ),
        'endcolor' => array(
            'argb' => 'FF431a5d'
        )
    ),
    'borders' => array(
        'top' => array(
            'style' => PHPExcel_Style_Border::BORDER_MEDIUM ,
            'color' => array(
                'rgb' => '143860'
            )
        ),
        'bottom' => array(
            'style' => PHPExcel_Style_Border::BORDER_MEDIUM ,
            'color' => array(
                'rgb' => '143860'
            )
        )
    ),
    'alignment' =>  array(
        'horizontal'=> PHPExcel_Style_Alignment::HORIZONTAL_CENTER,
        'vertical'  => PHPExcel_Style_Alignment::VERTICAL_CENTER,
        'wrap'      => TRUE
    )
);

$estiloInformacion = new PHPExcel_Style();
$estiloInformacion->applyFromArray( array(
    'font' => array(
      	'name'  => 'Arial',
       	'color' => array(
       	    'rgb' => '000000'
        )
    ),
    'fill' => array(
	'type'	=> PHPExcel_Style_Fill::FILL_SOLID,
	'color'	=> array(
            'argb' => 'FFd9b7f4')
	),
    'borders' => array(
        'left' => array(
       	    'style' => PHPExcel_Style_Border::BORDER_THIN ,
	    'color' => array(
    	        'rgb' => '3a2a47'
            )
        )
    )
));

La forma más rápida de dar formato a las celdas es a través de arreglos en los cuales se define todo el conjunto de formato que deseamos aplicar a las celdas. Veamos cómo se aplican.

$objPHPExcel->getActiveSheet()->getStyle('A1:D1')->applyFromArray($estiloTituloReporte);
$objPHPExcel->getActiveSheet()->getStyle('A3:D3')->applyFromArray($estiloTituloColumnas);
$objPHPExcel->getActiveSheet()->setSharedStyle($estiloInformacion, "A4:D".($i-1));

Como pueden ver el formato se aplicó de 2 formas diferentes una con getStyle(celda)->applyFromArray($arreglo) y la otra con setSharedStyle($estilo, celdas). ¿Cuál es la diferencia entre una y otra?, esto lo podemos apreciar cuando se aplican bordes: con la primer opción por ejemplo si se indica que se van a aplicar bordes superiores a las celdas desde B5 hasta F15, solo estaría aplicando el borde superior a la fila 5 debido a que toma el rango como si fuera una sola celda. En cambio con la segunda opción los bordes superiores se aplicarían a todas las filas desde la 5 hasta la 15 digamos que el formato se aplica a cada celda del rango indicado.

Ahora procedemos a asignar el ancho de las columnas de forma automática en base al contenido de cada una de ellas y lo hacemos con un ciclo de la siguiente forma.

for($i = 'A'; $i <= 'D'; $i++){
    $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension($i)->setAutoSize(TRUE);
}

Bien, ahora solo agregamos algunos detalles mas

// Se asigna el nombre a la hoja
$objPHPExcel->getActiveSheet()->setTitle('Alumnos');

// Se activa la hoja para que sea la que se muestre cuando el archivo se abre
$objPHPExcel->setActiveSheetIndex(0);

// Inmovilizar paneles
//$objPHPExcel->getActiveSheet(0)->freezePane('A4');
$objPHPExcel->getActiveSheet(0)->freezePaneByColumnAndRow(0,4);

Ya para terminar vamos a enviar el archivo para que el usuario lo descargue.

// Se manda el archivo al navegador web, con el nombre que se indica, en formato 2007
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="Reportedealumnos.xlsx"');
header('Cache-Control: max-age=0');

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save('php://output');
exit;
}
else{
    print_r('No hay resultados para mostrar');
}

OK, con eso se termina este ejercicio, más abajo está el link para que descarguen el ejemplo, para más información sobre esta librería puedes revisar su documentación o dejar algún comentario.

Si el contenido te fue de utilidad dale me gusta a nuestra página de Facebook.

download

92 comentarios en “Crear un reporte en Excel con PHP y MySQL”

  1. ANDRES dice:

    Probare este sistema de reportes.

  2. Eminson Mendoza dice:

    Muy bueno me sirvió de mucho 🙂

  3. Janett dice:

    Muy buena aportacion, gracias por la ayuda!!!

  4. alejandro dice:

    Facil, me anduvo de una!

  5. Williams Nasser dice:

    Excelente ejemplo muchisimas gracias, falto algunos parametros como por ejemplo establecer filtros y tambien algo que no e encontrado establecer tipo de datos como por ejemplo fecha, y establecer formulas pero en general doy 100 puntos

  6. Rosy dice:

    Si necesito hacer un libro de excel con varias hojas, cómo lo hago???? Es urgente, please!!!!

    1. denker dice:

      Puedes revisar la documentación aquí te dejo un link que te puede servir

      https://github.com/PHPOffice/PHPExcel/blob/develop/Documentation/markdown/Overview/06-Worksheets.md

      saludos

  7. aha dice:

    muchas gracias me ayudaste bastante XD

  8. Fernando dice:

    Excelente…! me esta sirviendo mucho, hay forma de agregarle una imagen al reporte??

  9. carlos dice:

    sos mostro tio!!!!!!!! he estado buscando esto por todos lados me has salvado el pellejo, y no solo lo creas si no que lo personalisas muy bn excelente excelente =)

  10. me marca error al crear la tabla

    #1064 – You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘CREATE TABLE IF NOT EXISTS `repexcel`.`carrera` (
    `idcarrera` INT UNSIGNED NOT’ at line 17

  11. Hugo dice:

    Hola, sería bueno que pongan ya el script para crear la base de datos porque al copiar pegar no funciona, da varios errores. Saludos.

  12. yo dice:

    no me sirvio
    🙁

  13. hfx dice:

    excelso , excelente explicación. hace mucho use esta librería , y veo que en 3 años a evolucionado mucho y es mucho mas útil que en sus inicio.

  14. PPK17 dice:

    Me sirvió de mucho y lo complementé con la documentación y los ejemplos q trae la libreria. Ahi van a encontrar más cosas que no pudieran encontrar aqui, así q se se las recomiendo leerlas y analizarlas tambien.

  15. Francisco dice:

    Hola lo ocupe de forma local en mi pc para generar el reporte y ni un problema pero luego lo subí a la web y me arroja el archivo vació y el excel me arroja que no puede abrir el archivo por que el formato o la extensión no son validos
    a nadie mas le paso eso ??

  16. Mike dice:

    Me aparece un mensaje que dice “Excel no puede abrir el archivo Reportedealumnos.xlsx porque el formato o la extension de este no son validos”…….. Que hago??

    1. sun2012 dice:

      Solo dale abrir, no pasa nada excel lo identifica y lo abre de todos modos, saludos.

  17. Miguel dice:

    al llegar al final , osea al generar el archivo me lo genera con errores y cuando lo abro solo son simbolos asi :

    Ï?Kúmy½ü½\-òt†%sJ¾/¿þPK‰’†DîWÔ}•edocProps/core.xml¥“[oã …ßû+ï8½¨µWêMûÐHÙMªÝW S‡Ödï¯_ ‰ë^*Uò :ߜ™9——Û¶AÁ:©Õ çŠ(®…Tõ ?¬î²sŒœgJ°F+˜á¾¬ŽJn ®-,¬6`½‡‚‘r73¼öÞ„8¾†–¹I TŸ´m™O[Ãø «L)=#-x&˜g$ffpÄ{KÁK³±M2œ@-(ïH>ÉÉ+ëÁ¶îӂ¤ŒÈVúÞÀ§èA譓Øuݤ;Nh˜?’æ÷Ë´j&UŒŠ®JÁ nym«¹¬7Ð,ƒ°†%)1ņ9?y?IWý{ø#PîWܙ€@a´b·ÈAù}|}³ºÃՔæ’ ßÙ*?/¦´È/2zZP‡xcòêÚî;}Ïöà’rðÒ7Pý£­t»åÐ ®ZüX ÍûåÏû”ÊŽ‹·Òøp“C€x˜ »„¡Xä6ÏÀýÈÿ ô¶ÂUv_6j2–ÓÁ‡¨jmû¡Ä‰¤Ýë͟QýPK‰’†Ds‘{Y³¦xl/theme/theme1.xmlíYOoÛ6¿ïSº·²lÉu‚:EìØëÖ¦ ·C´DK¬)Q 餾 íqÀ€aݰˀÝv¶h]ºO“­ÃÖý {úc‹Šé6iSlCëƒ-’¿÷ŸïñQ¾|å^ÌÐ!’ò¤k9”‰Ïš„]ëÖhx¡c!©p`ÆÒµæDZW¶>¸Œ7UDb‚€A£Œ¥µµ`>`ð•(™MøLø¹D”ÇS’û‘sÙgbÖµ@NÀFäž

    algun tipo de ayuda para este casoo?? porfavor

    1. Adriz dice:

      Alguna ayuda Miguel??

  18. Rodrigo dice:

    Excelente librería, tuve un par de errores, como aporte dejare la solución en agradecimiento:

    Generaba el archivo pero me daba un error decía:

    Excel no puede abrir el archivo ‘Reportedealumnos.xlsx’ por que el formato o la extensión de este no son validos…

    Solución, al menos para mi:

    La librería utiliza php_zip.dll la cual esta comentareada en lo archivos de php.ini bueno como no sabia cual de todos descomentarear lo hice en todos, los cuales están en las ubicaciones:

    – c:\windows\php.ini
    – c:\appserv\php5\php.ini-dist
    – c:\appserv\php5\php.ini-recommended
    – c:\AppServ\www\server\php\php.ini

    Buscamos y cambiamos
    ;extension=php_zip.dll a extension=php_zip.dll

    Si, sin el punto y coma del inicio, una vez hecho esto reiniciamos el servidor apache y todo funcionando de maravilla. Nuevamente gracias por la ayuda.

    1. da dice:

      amigo tengo el mismo problema que tenías pero no encuentro los archivos ni la localizacion :S help !!!!!

  19. Taty Andrade dice:

    Muy buen aporte me sirvio de mucho.. pero tengo un problema no se si alguien le sucedió lo mismo; al momento de descargar el reporte me sale en la info de descarga “Tiempo de descarga desconocido y jamas se descarga”; le quite la parte del codigo en la que se manda a la descarga y simplemente le puse que se guarde el archivo y se queda la pagina en espera como cargando, pero si crea el archivo y esta todo correcto… ojala me puedan ayudar
    Gracias

  20. dani dice:

    Grandisimo aporte!!

  21. johnny luis dice:

    Lineas abajo te colocare mi codigo; mi problema es que se genera el excel pero sin ningún resultado. favor te agradeceria tu ayuda

    Ver Historial

    var sp = ”;
    function animaTitulo()
    {
    var actual = document.title;
    document.title = actual.substr(1) + sp + actual.substring(0, 1);
    if (navigator.appVersion.indexOf(‘MSIE’)>=0)
    sp = (actual.substring(0, 1)==’ ‘)?” “:””;
    setTimeout(‘animaTitulo()’, 200);
    }

    Display();
    include(“conectar.php”);
    $link=conectar();

    $resultado=mysql_query(“select equipos_codigo,fecha,horometro,status from historial,status,servicios where servicios_idservicios=Idservicios and status_idstatus=Idstatus”,$link);

    //$consulta = “SELECT* FROM historial INNER JOIN status ON status_idstatus=Idstatus “;
    //$consulta .= ” INNER JOIN servicios ON servicios_idservicios=Idservicios “;

    //$resultado = $link->query($consulta);
    //$resultado = mysql_query($consulta);
    if(mysql_num_rows($resultado) > 0 ){

    date_default_timezone_set(‘America/Mexico_City’);
    if (PHP_SAPI == ‘cli’)
    die(‘Este archivo solo se puede ver desde un navegador web’);
    /** Se agrega la libreria PHPExcel */
    require_once ‘lib/PHPExcel/PHPExcel.php’;

    // Se crea el objeto PHPExcel
    $objPHPExcel = new PHPExcel();
    // Se asignan las propiedades del libro
    $objPHPExcel->getProperties()->setCreator(“Codedrinks”) // Nombre del autor
    ->setLastModifiedBy(“Codedrinks”) //Ultimo usuario que lo modificó
    ->setTitle(“Reporte Excel con PHP y MySQL”) // Titulo
    ->setSubject(“Reporte Excel con PHP y MySQL”) //Asunto
    ->setDescription(“Reporte de alumnos”) //Descripción
    ->setKeywords(“reporte alumnos carreras”) //Etiquetas
    ->setCategory(“Reporte excel”); //Categorias
    $tituloReporte = “Reporte de historial”;
    $titulosColumnas = array(‘EQUIPO’, ‘FECHA DE REPORTE’, ‘HOROMETRO’, ‘STATUS’);
    // Se combinan las celdas A1 hasta D1, para colocar ahí el titulo del reporte
    $objPHPExcel->setActiveSheetIndex(0)
    ->mergeCells(‘A1:D1’);
    // Se agregan los titulos del reporte
    $objPHPExcel->setActiveSheetIndex(0)
    ->setCellValue(‘A1’,$tituloReporte) // Titulo del reporte
    ->setCellValue(‘A3’, $titulosColumnas[0]) //Titulo de las columnas
    ->setCellValue(‘B3’, $titulosColumnas[1])
    ->setCellValue(‘C3’, $titulosColumnas[2])
    ->setCellValue(‘D3’, $titulosColumnas[3]);
    //Se agregan los datos de los alumnos

    $i = 4; //Numero de fila donde se va a comenzar a rellenar
    while ($fila = mysql_fetch_array($resultado)) {
    $objPHPExcel->setActiveSheetIndex(0)
    ->setCellValue(‘A’.$i, $fila[‘equipos_codigo’])
    ->setCellValue(‘B’.$i, $fila[‘fecha’])
    ->setCellValue(‘C’.$i, $fila[‘horometro’])
    ->setCellValue(‘D’.$i, $fila[‘status’]);
    $i++;
    }
    $estiloTituloReporte = array(
    ‘font’ => array(
    ‘name’ => ‘Verdana’,
    ‘bold’ => true,
    ‘italic’ => false,
    ‘strike’ => false,
    ‘size’ =>16,
    ‘color’ => array(
    ‘rgb’ => ‘FFFFFF’
    )
    ),
    ‘fill’ => array(
    ‘type’ => PHPExcel_Style_Fill::FILL_SOLID,
    ‘color’ => array(
    ‘argb’ => ‘FF220835’)
    ),
    ‘borders’ => array(
    ‘allborders’ => array(
    ‘style’ => PHPExcel_Style_Border::BORDER_NONE
    )
    ),
    ‘alignment’ => array(
    ‘horizontal’ => PHPExcel_Style_Alignment::HORIZONTAL_CENTER,
    ‘vertical’ => PHPExcel_Style_Alignment::VERTICAL_CENTER,
    ‘rotation’ => 0,
    ‘wrap’ => TRUE
    )
    );

    $estiloTituloColumnas = array(
    ‘font’ => array(
    ‘name’ => ‘Arial’,
    ‘bold’ => true,
    ‘color’ => array(
    ‘rgb’ => ‘FFFFFF’
    )
    ),
    ‘fill’ => array(
    ‘type’ => PHPExcel_Style_Fill::FILL_GRADIENT_LINEAR,
    ‘rotation’ => 90,
    ‘startcolor’ => array(
    ‘rgb’ => ‘c47cf2’
    ),
    ‘endcolor’ => array(
    ‘argb’ => ‘FF431a5d’
    )
    ),
    ‘borders’ => array(
    ‘top’ => array(
    ‘style’ => PHPExcel_Style_Border::BORDER_MEDIUM ,
    ‘color’ => array(
    ‘rgb’ => ‘143860’
    )
    ),
    ‘bottom’ => array(
    ‘style’ => PHPExcel_Style_Border::BORDER_MEDIUM ,
    ‘color’ => array(
    ‘rgb’ => ‘143860’
    )
    )
    ),
    ‘alignment’ => array(
    ‘horizontal’=> PHPExcel_Style_Alignment::HORIZONTAL_CENTER,
    ‘vertical’ => PHPExcel_Style_Alignment::VERTICAL_CENTER,
    ‘wrap’ => TRUE
    )
    );

    $estiloInformacion = new PHPExcel_Style();
    $estiloInformacion->applyFromArray( array(
    ‘font’ => array(
    ‘name’ => ‘Arial’,
    ‘color’ => array(
    ‘rgb’ => ‘000000’
    )
    ),
    ‘fill’ => array(
    ‘type’ => PHPExcel_Style_Fill::FILL_SOLID,
    ‘color’ => array(
    ‘argb’ => ‘FFd9b7f4’)
    ),
    ‘borders’ => array(
    ‘left’ => array(
    ‘style’ => PHPExcel_Style_Border::BORDER_THIN ,
    ‘color’ => array(
    ‘rgb’ => ‘3a2a47’
    )
    )
    )
    ));
    $objPHPExcel->getActiveSheet()->getStyle(‘A1:D1’)->applyFromArray($estiloTituloReporte);
    $objPHPExcel->getActiveSheet()->getStyle(‘A3:D3’)->applyFromArray($estiloTituloColumnas);
    $objPHPExcel->getActiveSheet()->setSharedStyle($estiloInformacion, “A4:D”.($i-1));
    for($i = ‘A’; $i setActiveSheetIndex(0)->getColumnDimension($i)->setAutoSize(TRUE);
    }
    // Se asigna el nombre a la hoja
    $objPHPExcel->getActiveSheet()->setTitle(‘Alumnos’);

    // Se activa la hoja para que sea la que se muestre cuando el archivo se abre
    $objPHPExcel->setActiveSheetIndex(0);

    // Inmovilizar paneles
    //$objPHPExcel->getActiveSheet(0)->freezePane(‘A4’);
    $objPHPExcel->getActiveSheet(0)->freezePaneByColumnAndRow(0,4);
    // Se manda el archivo al navegador web, con el nombre que se indica, en formato 2007
    header(‘Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet’);
    header(‘Content-Disposition: attachment;filename=”Reportedealumnos.xlsx”‘);
    header(‘Cache-Control: max-age=0’);

    $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, ‘Excel2007’);
    $objWriter->save(‘php://output’);
    exit;
    }
    else{
    print_r(‘No hay resultados para mostrar’);
    }

    1. sun2012 dice:

      Hola, para unir las tablas debes ocupar inner join, saludos.

  22. ClikC dice:

    Lo probrae gracias por el aporte.

  23. alonso dice:

    muy buenoo pero tengo un problema no se como poner la cabesera estaticaa k no se muva mejor dicho blokeado o inmovilizar una collumna bno se k funcion usar

  24. josé dice:

    Muchas gracias por este gran aporte. Me ha servido de mucho de verdad
    Todo bien para consultas de tablas con pocos registros, pero he tenido problemas para consultas de muchos registros. Especificamente una consulta de 40000 registros aprox que me fatal error Maximum execution time of 60 seconds exceeded o “Fatal error: Allowed memory size of 67108864 bytes exhausted (tried to allocate 32 bytes)” y me manda a los archivos PHPExcel/worksheet.php (no recuerdo las linas en este momento) o al archivo PHPExcel/Cell/DefaultValueBinder.php creo que la linea 1218.
    ojo, me ha dado distintos errores a veces porque estuve probando para modificar los valores en php.ini ya que he estado probando en servidor local
    Agradezco cualquier sugerencia que me puedan dar. Hasta pronto

  25. Carlos dice:

    Estimado Genial ,slaio de una . pero tengo0 una consulta como ahgo para que lo muestre en una pagina web antes de descargarlo en excel , si complentas con eso seria chevere

  26. Edher dice:

    Que tal buen dia, quisiera saber, si hay alguna opcion derecta en php para poder bloquear el archivo de Excel y no le hagan cambios.

  27. alejon dice:

    Donde puedo hallar la clase phpExcel?

  28. alejon dice:

    Ya halle la libreria, lo adapte a mi codigo pero esta pasando por este mensaje:No hay resultados para mostrar
    si pudieran ayudarme.
    este es mi codigo:

    Cédula:

    Excel

    <!–
    –>

    <?php

    if ($_POST['cedula'] && $_POST['buscar'])
    {
    $consulta2 = "SELECT * FROM deuda WHERE deuda.cedula = '{$_POST['cedula']}' ORDER BY nroapto";
    $consulta3 = @pg_query($connect,$consulta2);
    }

    que adapte al reporteexcel.php

  29. DanielSquishy dice:

    Cuando le doy click al link de descargar archivo, me manda el codigo fuente en la pagina, y no descarga nada que puedo hacer?

    1. Rodrigo dice:

      Tu interprete de apache no esta corriendo, dicho de otra manera ya revisaste si el servidor apache esta funcionando? o si la pagina esta alojada en la carpeta del servidor?

  30. Angel De la Cruz dice:

    Cuando descargo el archivo me aparece que esta dañado o que la extensión es incorrecta, y solo aparece un botón de aceptar y no abre nada. Que estaria pasando ahi?

  31. Esar J. Ramirez dice:

    Muchas, muchas, muchas, pero muchas gracias!!!

  32. Nicolás dice:

    Hola! está muy bueno el tutorial peeeeero cuando descargo el archivo me tira que está dañado, vi que Angel de la cruz le pasó lo mismo. Al abrir el archivo con notepad++ veo que al principio me agrega un espacio en blanco… pero no encuentro dónde se está agregando ese espacio… que puede ser??

    gracias!!!

  33. fredy dice:

    Actualmente me encuentro desarrollando una pequeña aplicación web para la cual necesito la generación de reportes .xls, para la aplicación utilizo una arquitectura MVC donde no seria posible dejar todo en un solo .php como lo planteas. Al querer separarlo me permite descargar el archivo pero no es posible verlo desde excel y al abrirlo como archivo plano es totalmente ilegible.
    quisiera saber como podría arreglar esto?

  34. Israel Sanchez dice:

    Woooooooooo ……….. excelente aporte amigo .. gracias …. enserio gracias

  35. Renn dice:

    Muy bueno ! Me sirvio y es my facil de usar. Muchas gracias por tu trabajo

  36. Antonio dice:

    Buenas noches, me interesa contactar con usted, necesito realizar una libreria similar.
    Cordialmente, Antonio

    1. denker dice:

      Hola amigo, puedes enviarme un correo a codedrinks@gmail.com

  37. Francisco dice:

    Tengo el siguiente código

    load(‘formato_shell.csv’);
    $nuevo = new PHPExcel();
    $nuevo->setActiveSheetIndex(0);

    for ($i = 0; $i getWorksheetIterator() as $worksheet){
    foreach($worksheet->getRowIterator() as $row){
    $cellIterator = $row->getCellIterator();
    $cellIterator->setIterateOnlyExistingCells(false);
    foreach($cellIterator as $cell){
    $nuevo->getActiveSheet()->setCellValue($cell->getCoordinate(), $cell->getCalculatedValue());
    $celda = substr($cell->getCoordinate(), 1);
    $coord = (string)”B$celda”;
    if ($cell->getCalculatedValue() !== ‘Product Quantity’){
    if (trim($cell->getCalculatedValue()) === trim($claves[$i])){
    echo “” . $coord . “”;
    $nuevo->getActiveSheet()->setCellValue(“$coord”, $cantidades[$i]);
    //$nuevo->getActiveSheet()->getCell(“$coord”)->setValue($cantidades[$i]);
    //echo $nuevo->getActiveSheet()->getCell(“$coord”)->getValue();
    //break;
    }
    }
    }
    }
    }
    }

    $objWriter = PHPExcel_IOFactory::createWriter($nuevo, ‘CSV’);
    $objWriter->save(‘P-001.csv’);

    chmod(‘P-001.csv’, 0777);

    lo que necesito es leer un archivo y copiar el contenido en otro pero cuando la clave de un producto coincide con las claves que contiene el archivo debo colocar en la celda BX la cantidad de producto que se va a pedir pero no lo hace parece que se inicializa o algo así y siempre se va vacía la celda, espero me puedan ayudar

  38. Javier Davila dice:

    Excelente aporte. Gracias… Es posible generar el reporte en formato Excel 2003 ?

  39. fer dice:

    que buen aporte me sirvio de mucho gracias, y tengo una pregunta, como puedo agregar una imagen al reporte que se esta generando

  40. Alexis dice:

    como puedo hacer que el excel reconozca las ñ ???

  41. Jaime Eduardo dice:

    Se pueden mostrar tambien imagenes jaladas de la base de datos e insertar en el archivo excel? las imagenes se guardan en un campo tipo blob. Gracias

  42. maykol dice:

    buena ayuda! pero cuando intento abrir el reporte de excel me da error dice q el formato de la extencion no es valido que compruebe que el archivo no este dañado

  43. jorge dice:

    no reconoce la extencion en office 2010, dice que esta dañado y no reconoce este formato

  44. wilmer dice:

    Holas.. amigo Una sola Pregunta el codigo fuente solo sirver para axcel 2007 ? digo por que me sale archivo dañado ah estoy exportado axcel 2013..
    Espero su Respuesta.. Saludos

  45. ALBERTO dice:

    Tengo un problema: en un campo generado por mi bd tengo datos con cero por la izquierda asi por ejemplo (012587), pero no me exporta el cero al excel, en este ejemplo digamos que la columa A contiene dichos valores como puedo ingresar el codigo del estilo para que me muestre, estuve revisando algunos tutoriales y al parecer esta es la función PHPExcel_Cell_DataType::TYPE_STRING.
    Agradecere sus respuestas de entemano

  46. enrique dice:

    Muy bien, gracias por el aporte

  47. facundo dice:

    Buenos dias, como seria para crear la base de datos y la tabla, descargue el ejemplo y no me aparece, en el navegador me aparece lo siguiente:

    Warning: mysqli::mysqli(): (HY000/1045): Access denied for user ‘usuario’@’localhost’ (using password: YES) in C:\xampp\htdocs\reporteexcel\reporteexcel.php on line 2
    La conexión con el servidor de base de datos falló: Access denied for user ‘usuario’@’localhost’ (using password: YES)

    deduzco que es porque no tengo la base de datos

  48. OSCAR dice:

    Amigo una inquietud yo corro la aplicacion, y me descarga el archivo. cuando lo abro me aparece esto
    Fatal error: Class ‘ZipArchive’ not found in C:\AppServ\www\proyecto\lib\PHPExcel\PHPExcel\Writer\Excel2007.php on line 227

    este es mi codigo que pudo pasar?

    0){

    date_default_timezone_set(‘America/Bogota’);

    if (PHP_SAPI == ‘cli’)
    die(‘Este archivo solo se puede ver desde un navegador web’);

    /** Se agrega la libreria PHPExcel */
    require_once ‘lib/PHPExcel/PHPExcel.php’;

    // Se crea el objeto PHPExcel
    $objPHPExcel = new PHPExcel();

    $objPHPExcel->getProperties()->setCreator(“Codedrinks”) //Autor
    ->setLastModifiedBy(“Codedrinks”) //Ultimo usuario que lo modificó
    ->setTitle(“Reporte Excel con PHP y MySQL”)
    ->setSubject(“Reporte Excel con PHP y MySQL”)
    ->setDescription(“Reporte de facilitador”)
    ->setKeywords(“reporte nombres facilitadores”)
    ->setCategory(“Reporte excel”);

    $tituloReporte = “Relación de facilitadores”;
    $titulosColumnas = array(‘NUMERO DE DOCUMENTO’, ‘NOMBRES Y APELLIDOS’, ‘CODIGO’);

    $objPHPExcel->setActiveSheetIndex(0)
    ->mergeCells(‘A1:C1’);

    // Se agregan los titulos del reporte
    $objPHPExcel->setActiveSheetIndex(0)
    ->setCellValue(‘A1’,$tituloReporte)
    ->setCellValue(‘A3’, $titulosColumnas[0])
    ->setCellValue(‘B3’, $titulosColumnas[1])
    ->setCellValue(‘C3’, $titulosColumnas[2]);

    $i = 4;
    while ($fila =mysql_fetch_array($resultado)){
    $objPHPExcel->setActiveSheetIndex(0)
    ->setCellValue(‘A’.$i, $fila[‘n_id’])
    ->setCellValue(‘B’.$i, $fila[‘nom_f’])
    ->setCellValue(‘C’.$i, $fila[‘codigo’]);
    $i++;
    }

    $estiloTituloReporte = array(
    ‘font’ => array(
    ‘name’ => ‘Verdana’,
    ‘bold’ => true,
    ‘italic’ => false,
    ‘strike’ => false,
    ‘size’ =>16,
    ‘color’ => array(
    ‘rgb’ => ‘FFFFFF’
    )
    ),
    ‘fill’ => array(
    ‘type’ => PHPExcel_Style_Fill::FILL_SOLID,
    ‘color’ => array(‘argb’ => ‘FF220835’)
    ),
    ‘borders’ => array(
    ‘allborders’ => array(
    ‘style’ => PHPExcel_Style_Border::BORDER_NONE
    )
    ),
    ‘alignment’ => array(
    ‘horizontal’ => PHPExcel_Style_Alignment::HORIZONTAL_CENTER,
    ‘vertical’ => PHPExcel_Style_Alignment::VERTICAL_CENTER,
    ‘rotation’ => 0,
    ‘wrap’ => TRUE
    )
    );

    $estiloTituloColumnas = array(
    ‘font’ => array(
    ‘name’ => ‘Arial’,
    ‘bold’ => true,
    ‘color’ => array(
    ‘rgb’ => ‘FFFFFF’
    )
    ),
    ‘fill’ => array(
    ‘type’ => PHPExcel_Style_Fill::FILL_GRADIENT_LINEAR,
    ‘rotation’ => 90,
    ‘startcolor’ => array(
    ‘rgb’ => ‘c47cf2’
    ),
    ‘endcolor’ => array(
    ‘argb’ => ‘FF431a5d’
    )
    ),
    ‘borders’ => array(
    ‘top’ => array(
    ‘style’ => PHPExcel_Style_Border::BORDER_MEDIUM ,
    ‘color’ => array(
    ‘rgb’ => ‘143860’
    )
    ),
    ‘bottom’ => array(
    ‘style’ => PHPExcel_Style_Border::BORDER_MEDIUM ,
    ‘color’ => array(
    ‘rgb’ => ‘143860’
    )
    )
    ),
    ‘alignment’ => array(
    ‘horizontal’ => PHPExcel_Style_Alignment::HORIZONTAL_CENTER,
    ‘vertical’ => PHPExcel_Style_Alignment::VERTICAL_CENTER,
    ‘wrap’ => TRUE
    ));

    $estiloInformacion = new PHPExcel_Style();
    $estiloInformacion->applyFromArray(
    array(
    ‘font’ => array(
    ‘name’ => ‘Arial’,
    ‘color’ => array(
    ‘rgb’ => ‘000000’
    )
    ),
    ‘fill’ => array(
    ‘type’ => PHPExcel_Style_Fill::FILL_SOLID,
    ‘color’ => array(‘argb’ => ‘FFd9b7f4’)
    ),
    ‘borders’ => array(
    ‘left’ => array(
    ‘style’ => PHPExcel_Style_Border::BORDER_THIN ,
    ‘color’ => array(
    ‘rgb’ => ‘3a2a47’
    )
    )
    )
    ));

    $objPHPExcel->getActiveSheet()->getStyle(‘A1:C1’)->applyFromArray($estiloTituloReporte);
    $objPHPExcel->getActiveSheet()->getStyle(‘A3:C3’)->applyFromArray($estiloTituloColumnas);
    $objPHPExcel->getActiveSheet()->setSharedStyle($estiloInformacion, “A4:C”.($i-1));

    for($i = ‘A’; $i setActiveSheetIndex(0)
    ->getColumnDimension($i)->setAutoSize(TRUE);
    }

    // Se asigna el nombre a la hoja
    $objPHPExcel->getActiveSheet()->setTitle(‘Facilitadores’);

    // Se activa la hoja para que sea la que se muestre cuando el archivo se abre
    $objPHPExcel->setActiveSheetIndex(0);
    // Inmovilizar paneles
    //$objPHPExcel->getActiveSheet(0)->freezePane(‘A4’);
    $objPHPExcel->getActiveSheet(0)->freezePaneByColumnAndRow(0,4);

    // Se manda el archivo al navegador web, con el nombre que se indica (Excel2007)
    header(‘Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet’);
    header(‘Content-Disposition: attachment;filename=”Reportedealumnos.xls”‘);
    header(‘Cache-Control: max-age=0’);

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

    }
    else{
    print_r(‘No hay resultados para mostrar’);
    }

    ?>

  49. GALA dice:

    Saludos.
    Yo tenía el problema que al momento de generar el archivo no mostraba ningún contenido, tengo Office 2013, así que puede ser por eso, no sé, lo solucione cambiando estás líneas:

    header(‘Content-Disposition: attachment;filename=”Reportedealumnos.xlsx”‘);
    $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, ‘Excel2007’);

    por:
    header(‘Content-Disposition: attachment;filename=”Reportedealumnos.xls”‘);
    $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, ‘Excel5’);

    El archivo generado es más “viejo” versión 97-2003. Espero les sea de ayuda.

  50. elena dice:

    por que me marca error desde la 2 linea?
    $conexion = new mysqli(‘localhost’,’root’,’1′,’conuee’,3306);
    if (mysqli_connect_errno()) {
    printf(“La conexión con el servidor de base de datos falló: %s\n”, mysqli_connect_error());
    exit();
    }

    1. sun2012 dice:

      Algún parámetro de conexión esta mal.

  51. Roberto dice:

    Buenos días, estoy teniendo un problema con una función que crea un excel. A ver si alguno me puede echar un cable.

    Resulta que yo tengo una función donde:

    – Extraigo datos de una base de datos.
    – Configuro un excel con esos datos.
    – Guardo el excel.

    Hasta ahí va bien.

    El problema principal es que tengo varias tablas, y me gustaría que cada tabla fuera una hoja distinta en el excel.

    He intentado hacerlo de muchas maneras pero o no me lo hace, o necesito repetir el código de creación del excel una y otra vez, haciendo que el programa sea increíblemente lento e inestable.

    Por lo que por ahora, estoy creando el excel hoja a hoja y luego lo junto de forma manual, lo cual cuando haya muchos excel resultará tedioso.

    Existiría alguna forma de hacerlo? o estoy diciendo locuras?

    Hasta ahora he intentado:

    – Crear otra función fuera que cargue el excel y meterlas todas antes del $objWriter->save($documento);
    – Repetir el código una y otra vez de todas las tablas. Funciona a medias porque como digo da problemas el tiempo de conexión, porque las tablas son muy grandes.
    -Llamar a la función save desde donde invoco a la función y crear la nueva hoja allí, el problema es que no me reconoce como que he creado una hoja y al intentar escribir en la segunda me dice que no puede porque solo hay una.

  52. Roberto dice:

    Joe, bastaba que preguntara algo en algún lugar para que encontrara la solución jaja.

    Al final lo resolví haciendo cada Excel por separado y luego uniendolos todos mediante el addexternalsheet.

    Pongo el código por si alguno lo necesita:

    //Hay que borrar el archivo si ya existe, si no da conflicto
    if (file_exists(“lista_excel/ruta del fichero”)) {
    unlink (“fichero”);
    }

    //lleno el array con la ruta de los archivos que quiero unir.

    $listas=array();
    $directorio = opendir(“lista_excel/”); //ruta actual
    while ($archivo = readdir($directorio)) //obtenemos un archivo y luego otro sucesivamente
    {
    if ($archivo != ‘.’ && $archivo != ‘..’)
    {
    if (is_dir($archivo))//verificamos si es o no un directorio
    {
    echo “[“.$archivo . “]”; //de ser un directorio lo envolvemos entre corchetes
    }
    else
    {
    $listas[]=’lista_excel/’.$archivo;
    }
    }
    }
    //comprobación de que el array se está llenando bien
    /*for($f=0;$f<count($lista);$f++)
    {
    echo $lista[$f];
    echo "”;
    } */

    require_once ‘libs/phpexcel/Classes/PHPExcel.php’;
    $bigExcel = new PHPExcel();
    //hay que remover la primera ya que al agregar las otras siempre crea una.
    $bigExcel->removeSheetByIndex(0);
    $objReader = new PHPExcel_Reader_Excel2007();

    //cargame cada elemento del array
    foreach ($listas as $lista) {
    $excel = $objReader->load($lista);
    //agregame las hojas
    foreach ($excel->getAllSheets() as $sheet) {
    $bigExcel->addExternalSheet($sheet);
    }

    foreach ($excel->getNamedRanges() as $namedRange) {
    $bigExcel->addNamedRange($namedRange);
    }
    }

    $writer = new PHPExcel_Writer_Excel2007($bigExcel);
    $writer->save(‘ruta del nuevo archivo a crear.xlsx’);

  53. Antonio dice:

    Que tal, buen aporte, tengo un problema, al generar el archivo en el valor de la variable $tituloReporte no me aparece el valor que se le da a la variable, en lugar me aparece la palabra FALSO.

  54. Jhon Jame Piguave Herrera dice:

    Cuando subo el archivo a un hospedaje web no funciona,
    en localhost es perfecto, pero en la web no muestra nada

  55. Adriz dice:

    Mi archivo me envía puros signos raros, por que??? En que parte tengo que modificar

    Otra cosa me pone mi consulta pero jamas me pone el estilo ni el nombre de las columnas,

    Gracias y buen dia a todos

  56. Edwin dice:

    Buenas tardes,
    Me puedes informar si esta clase me sirve para exportar a Excel datos de una bdd Oracle.

  57. cesar dice:

    buenas tardes, funciona la libreria phpexcel y todo pero si se quiere q el usuario final modifique todos los datos q quiera en excel y haga lo que quiera con formulas y eso…..
    por que estos datos al parecer quedan como bloqueados.

    cual es la solucion gracias

  58. cesar dice:

    buenas tardes, funciona la libreria phpexcel y todo pero si se quiere q el usuario final modifique todos los datos q quiera en excel y haga lo que quiera con formulas y eso…..
    por que estos datos al parecer quedan como bloqueados.

    cual es la solucion gracias

  59. mike dice:

    En donde declaro que tabla es la que quiero que me cree el reporte?

    1. sun2012 dice:

      En la consulta sql

  60. henrywwei dice:

    Hola yo necesito una ayuda
    estoy realizando un reporte que me exportar la cedula y el nombre de estudiante con campo nota1 nota 2 noat 3 nota y promedio la cosa es q quiero validar estos datos o la celdas y louego sacar el promedio gracias

  61. Diego A. dice:

    Si les sirve de comentario yo solucione el problema de simbolos raros y de que no abria bien el archivo agregando.
    ob_end_clean();

    asi:

    $objPHPExcel->getActiveSheet()->setTitle(‘Herramientas’);
    $objPHPExcel->setActiveSheetIndex(0);
    $objPHPExcel->getActiveSheet()->freezePaneByColumnAndRow(0,4);
    header(‘Content-Type: application/vnd.openxmlformats-officedocuments.spreadsheetml.sheet’);
    header(‘Content-Disposition: attachment;filename=”Reporte.xlsx”‘);
    header(‘Cache-Control: max-age=0’);

    $objWriter= PHPExcel_IOFactory::createWriter($objPHPExcel, ‘Excel2007’ );
    ob_end_clean();
    $objWriter->save(‘php://output’);
    exit;
    }
    else
    {
    print_r(‘Nohay Resultado para mostrar’);
    }

    1. JCarlos RG dice:

      Tu respuesta me salvo… GRACIAS !!!!

    2. Cristiams dice:

      Tambien salvaste mi archivo gracias

  62. ned land dice:

    buen dia todo corrio bien amigo descargo el archivo y me descarga todo el reporte completo pero al momento de imprimirlo no me imprime todo el reporte, que sera lo que estare aplicando mal??

  63. Héctpr dice:

    Muchas gracias por este aporte. Un abrazo!

  64. jose jjuan tellez dice:

    Hola buenas tardes Excelente aporte me es de ayuda pero tengo un problema dejo mi codigo modificado (manda todo bien pero no habre el documento de excel “Excel no puede abrir “documento tal” por que el formato o la extension no son validos……”
    dejo mi codigo la verdad no se q podria ser :/
    query($consulta);

    if($resultado->num_rows > 0 ){

    date_default_timezone_set(‘America/Mexico_City’);

    if (PHP_SAPI == ‘cli’)

    die(‘Este archivo solo se puede ver desde un navegador web’);

    /** Se agrega la libreria PHPExcel */

    require_once ‘lib/PHPExcel/PHPExcel.php’;

    // Se crea el objeto PHPExcel

    $objPHPExcel = new PHPExcel();

    // Se asignan las propiedades del libro

    $objPHPExcel->getProperties()->setCreator(“Codedrinks”) //Autor

    ->setLastModifiedBy(“Codedrinks”) //Ultimo usuario que lo modificó

    ->setTitle(“Reporte Excel con PHP y MySQL”)
    //Titulo
    ->setSubject(“Reporte Excel con PHP y MySQL”)
    //Asunto
    ->setDescription(“Reporte de registro3”)
    //Descripcion
    ->setKeywords(“reporte registro3”)
    //Etiquetas
    ->setCategory(“Reporte excel”);

    //Categorias

    $tituloReporte = “Consulta de usuarios registrados”;

    $titulosColumnas = array(‘ID’, ‘NOMBRES’, ‘APELLIDOS’, ‘USUARIO’, ‘CONTRASEÑA’, ‘EMAIL’, ‘COMENTARIO’);

    $objPHPExcel->setActiveSheetIndex(0)

    ->mergeCells(‘A1:G1’);

    // Se agregan los titulos del reporte

    $objPHPExcel->setActiveSheetIndex(0)

    ->setCellValue(‘A1’,$tituloReporte)
    //Titulo del Reporte
    ->setCellValue(‘A3’, $titulosColumnas[0])
    //titulo de las columnas
    ->setCellValue(‘B3’, $titulosColumnas[1])

    ->setCellValue(‘C3’, $titulosColumnas[2])

    ->setCellValue(‘D3’, $titulosColumnas[3])

    ->setCellValue(‘E3’, $titulosColumnas[4])

    ->setCellValue(‘F3’, $titulosColumnas[5])

    ->setCellValue(‘G3’, $titulosColumnas[6]);

    //Se agregan los datos de los alumnos

    $i = 8;

    while ($fila = $resultado->fetch_array()) {

    $objPHPExcel->setActiveSheetIndex(0)

    ->setCellValue(‘A’.$i, $fila[‘id’])

    ->setCellValue(‘B’.$i, $fila[‘Nombre’])

    ->setCellValue(‘C’.$i, $fila[‘Apellidos’])

    ->setCellValue(‘D’.$i, $fila[‘Usuario’])

    ->setCellValue(‘E’.$i, $fila[‘Contrasena’])

    ->setCellValue(‘F’.$i, $fila[‘Email’])

    ->setCellValue(‘G’.$i, $fila[‘Comentario’]);

    $i++;

    }

    $estiloTituloReporte = array(

    ‘font’ => array(

    ‘name’ => ‘Verdana’,

    ‘bold’ => true,

    ‘italic’ => false,

    ‘strike’ => false,

    ‘size’ =>16,

    ‘color’ => array(

    ‘rgb’ => ‘FFFFFF’

    )

    ),

    ‘fill’ => array(

    ‘type’ => PHPExcel_Style_Fill::FILL_SOLID,

    ‘color’ => array(
    ‘argb’ => ‘FF220835’)

    ),

    ‘borders’ => array(

    ‘allborders’ => array(

    ‘style’ => PHPExcel_Style_Border::BORDER_NONE

    )

    ),

    ‘alignment’ => array(

    ‘horizontal’ => PHPExcel_Style_Alignment::HORIZONTAL_CENTER,

    ‘vertical’ => PHPExcel_Style_Alignment::VERTICAL_CENTER,

    ‘rotation’ => 0,

    ‘wrap’ => TRUE

    )

    );

    $estiloTituloColumnas = array(

    ‘font’ => array(

    ‘name’ => ‘Arial’,

    ‘bold’ => true,

    ‘color’ => array(

    ‘rgb’ => ‘FFFFFF’

    )

    ),

    ‘fill’=> array(

    ‘type’ => PHPExcel_Style_Fill::FILL_GRADIENT_LINEAR,

    ‘rotation’ => 90,

    ‘startcolor’ => array(

    ‘rgb’ => ‘c47cf2’

    ),

    ‘endcolor’ => array(

    ‘argb’ => ‘FF431a5d’

    )

    ),

    ‘borders’ => array(

    ‘top’ => array(

    ‘style’ => PHPExcel_Style_Border::BORDER_MEDIUM ,

    ‘color’ => array(

    ‘rgb’ => ‘143860’

    )

    ),

    ‘bottom’ => array(

    ‘style’ => PHPExcel_Style_Border::BORDER_MEDIUM ,

    ‘color’ => array(

    ‘rgb’ => ‘143860’

    )

    )

    ),

    ‘alignment’ => array(

    ‘horizontal’ => PHPExcel_Style_Alignment::HORIZONTAL_CENTER,

    ‘vertical’ => PHPExcel_Style_Alignment::VERTICAL_CENTER,

    ‘wrap’ => TRUE

    )
    );

    $estiloInformacion = new PHPExcel_Style();

    $estiloInformacion->applyFromArray(
    array(

    ‘font’ => array(

    ‘name’ => ‘Arial’,

    ‘color’ => array(

    ‘rgb’ => ‘000000’

    )

    ),

    ‘fill’ => array(

    ‘type’ => PHPExcel_Style_Fill::FILL_SOLID,

    ‘color’ => array(‘argb’ => ‘FFd9b7f4’)

    ),

    ‘borders’ => array(

    ‘left’ => array(

    ‘style’ => PHPExcel_Style_Border::BORDER_THIN ,

    ‘color’ => array(

    ‘rgb’ => ‘3a2a47’

    )

    )

    )

    ));

    $objPHPExcel->getActiveSheet()->getStyle(‘A1:G1’)->applyFromArray($estiloTituloReporte);

    $objPHPExcel->getActiveSheet()->getStyle(‘A3:G3’)->applyFromArray($estiloTituloColumnas);

    $objPHPExcel->getActiveSheet()->setSharedStyle($estiloInformacion, “A4:G”.($i-1));

    for($i = ‘A’; $i setActiveSheetIndex(0)->getColumnDimension($i)->setAutoSize(TRUE);

    }

    // Se asigna el nombre a la hoja

    $objPHPExcel->getActiveSheet()->setTitle(‘registro3’);

    // Se activa la hoja para que sea la que se muestre cuando el archivo se abre

    $objPHPExcel->setActiveSheetIndex(0);

    // Inmovilizar paneles

    //$objPHPExcel->getActiveSheet(0)->freezePane(‘A4’);

    $objPHPExcel->getActiveSheet(0)->freezePaneByColumnAndRow(0,8);

    // Se manda el archivo al navegador web, con el nombre que se indica (Excel2007)

    header(‘Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet’);

    header(‘Content-Disposition: attachment;filename=”Consulta.xlsx”‘);

    header(‘Cache-Control: max-age=0’);

    $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, ‘Excel2007’);

    $objWriter->save(‘php://output’);

    exit;

    }

    else{

    print_r(‘No hay resultados para mostrar’);

    }
    ?>

  65. jose jjuan tellez dice:

    Como no se ve al principio..
    esta es la parte de la conexion q va arriba del codigo

    query($consulta);

    if($resultado->num_rows > 0 ){

    date_default_timezone_set(‘America/Mexico_City’);

  66. jose jjuan tellez dice:

    $conexion = new mysqli(‘localhost’,’root’,”,’ejemplo’,3306);

    if (mysqli_connect_errno()) {

    printf(“La conexión con el servidor de base de datos falló: %s\n”, mysqli_connect_error());

    exit();

    }

    $consulta = “SELECT * FROM registro3”;

    $resultado = $conexion->query($consulta);

  67. Cómo puedo autoajustar el ancho de celdas, mis tablas en las que estoy utilizando este reporte, contienen más de 30 campos y el ciclo for no me funciona, habrá alguna otra forma para autoajustar el contenido?

  68. Excelente, la única palabra para definir este aporte. Tengo búsqueda de registros, me gustaría generar otro reporte pero con los registros de la búsqeda generada, hay alguna forma de realizar esto? Saludos.

  69. Diego dice:

    no me funciona con “Excel2007” ni con la extension xlsx?

  70. juan dice:

    hola tengo una celda que contiene una cifra de 16 digitos y cuando importo a excel me combierte los ultimos 2 digitos en ceros, hay alguna opción de mandarlo a texto y respete toda la numeracion o algo para que me deje los 16 digitos ?

    saludos.

  71. Jose dice:

    Muy buen tutorial pero como puedo pasar un parámetro de php a la consulta para que me haga un filtrado de datos en excel mediante where…por ejemplo
    select campo1, campo2, from tabla1 where campo3=’$bus’;

  72. Andres Marigal dice:

    hola en mi caso necesito inportar todo un libro de excel a una base de datos mysql con php y que se guarde en diferentes tablas de mi DB, cada hoja del libro va en tablas diferentes, como puedo hacerlo?

    1. sun2012 dice:

      Si ya tienes tu base de datos pues las hojas deben ser como estan tus tablas o hacer tus tablas como estan tus hojas pero eso no estaria modelada tu base de datos.

  73. Andres Marigal dice:

    Ya tengo definidas mis tablas en la DB y los libros de excel, ahora que método me sirve para poder subir la información de mi libro a la Base de Datos

  74. car64 dice:

    Como puedo guardar en archivo en el servidor donde se ejecuta el script??

  75. Marlags dice:

    Se puede generar un gráfico en el mismo documento?
    Necesito generar el excel, pero aparte de la información necesito un gráfico de esta.
    Espero me puedas ayudar, gracias por el aporte, explicas muy bien.

  76. ¿Por que me manda que el excel esta dañado?

  77. liliana dice:

    amigo ERES EL MEJOR ME QUEDO ESPECTACULAR SALTE DE LA SILLA AL VER EL REPORTE “GRACIAAAAAAAAAAAAAAAAAAAAAAAAAAS

  78. Milton Lopez dice:

    Man Sos la Ley!!!!!
    Me ayudaste como no tenes idea!!!
    Saludos

Deja un comentario