Generar archivos Excel con PHP y MySQL
Generar archivos Excel con PHP y MySQL. Sin duda hoy en día el lenguaje PHP está creciendo muy bien en el ámbito del desarrollo de sistemas web y/o páginas web. Podemos apreciar que interactúa de una manera muy sencilla con los famosos programas de uso diario como ser: Word, Excel, Power Point, PDFs.
PHP puede insertar registros a la base de datos mediante un formulario y el uso de funciones propias del lenguaje. Sin embargo, también puede extraer esos registros a una página web que el usuario quiere mostrar y/o generar un nuevo fichero en Excel con su nombre y puede usted descargarlo sin complicaciones. PHP de manera dinámica muestra la información extraída de una base de datos, por ejemplo MySQL.
Generar archivos Excel con PHP y MySQL
¿Qué necesitamos para lograr este objetivo?
Básicamente unir algunos lenguajes como los siguientes que listaremos a continuación.
- Lenguaje HTML que sería el resultado final
- Una librería llamada Bootstrap para darle la interfaz moderna.
- Un lenguaje potente como PHP
- Base de datos para almacenar y extraer información (MySQL).
Recursos para la implementación de nuestro sistema
Una base de datos llamada «php_phpexcel» y su tabla con el nombre «contactos»
CREATE TABLE `contactos` ( `id` int(11) NOT NULL, `nombres` varchar(250) NOT NULL, `email` varchar(250) DEFAULT NULL, `asunto` varchar(220) DEFAULT NULL, `mensajes` text, `fcreacion` datetime DEFAULT NULL, `fmodificacion` datetime DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT; -- -- Volcado de datos para la tabla `contactos` -- INSERT INTO `contactos` (`id`, `nombres`, `email`, `asunto`, `mensajes`, `fcreacion`, `fmodificacion`) VALUES (1, 'Mario', 'admin25@mimailes.com', 'Examen 01', 'Mi resultado 01', '2018-04-24 21:03:00', NULL), (2, 'Mario', 'admin25@mimailes.com', 'Examen 02', 'Mi resultado 02', '2018-04-24 21:20:07', NULL), (3, 'Mario', 'admin25@hotmail.com', 'Examen 03', 'Mi resultado 03', '2018-04-24 21:37:52', NULL), (4, 'Mario Giron', 'admin25@mimailes.com', 'Examen 04', 'Mi resultado 04 del parcial', '2018-04-24 12:24:27', NULL), (5, 'Mario Giron', 'admin25@mimailes.com', 'Examen 05', 'Mi resultado 05 del parcial', '2018-04-24 12:26:35', NULL);
Archivo db.php
Fichero de conexión con el gestor de base de datos utilizando MySQLi para tal objetivo.
<?php // Configuración necesaria para acceder a la data base. $hostname = "localhost"; $usuariodb = "root"; $passworddb = "root"; $dbname = "php_phpexcel"; // Generando la conexión con el servidor $conectar = mysqli_connect($hostname, $usuariodb, $passworddb, $dbname); ?>
El archivo form_contacto.php
Este archivo será el encargado de recoger la información que posteriormente sera almacenada en la base de datos.
<form class="form-horizontal" name="formcontato" method="POST" action="MensajeError.php"> <div class="form-group"> <label for="inputEmail3" class="col-sm-2 control-label"> Nombres: </label> <div class="col-sm-10"> <input type="text" class="form-control" name="nombres" placeholder="Nombre Completo" <?php if(!empty($_SESSION['value_nombres'])){ echo "value='".$_SESSION['value_nombres']."'"; unset($_SESSION['value_nombres']); } ?> > <?php if(!empty($_SESSION['baulphp_nombres'])){ echo "<p style='color: #f00; '>".$_SESSION['baulphp_nombres']."</p>"; unset($_SESSION['baulphp_nombres']); } ?> </div> </div> <div class="form-group"> <label for="inputEmail3" class="col-sm-2 control-label"> E-mail: </label> <div class="col-sm-10"> <input type="email" class="form-control" name="email" placeholder="Su e-mail" <?php if(!empty($_SESSION['value_email'])){ echo "value='".$_SESSION['value_email']."'"; unset($_SESSION['value_email']); } ?>> <?php if(!empty($_SESSION['baulphp_email'])){ echo "<p style='color: #f00; '>".$_SESSION['baulphp_email']."</p>"; unset($_SESSION['baulphp_email']); } ?> </div> </div> <div class="form-group"> <label for="inputEmail3" class="col-sm-2 control-label"> Asunto: </label> <div class="col-sm-10"> <input type="text" class="form-control" name="asunto" placeholder="Asunto de contacto" <?php if(!empty($_SESSION['value_asunto'])){ echo "value='".$_SESSION['value_asunto']."'"; unset($_SESSION['value_asunto']); } ?>> <?php if(!empty($_SESSION['baulphp_asunto'])){ echo "<p style='color: #f00; '>".$_SESSION['baulphp_asunto']."</p>"; unset($_SESSION['baulphp_asunto']); } ?> </div> </div> <div class="form-group"> <label for="inputEmail3" class="col-sm-2 control-label"> Mensaje: </label> <div class="col-sm-10"> <?php if(!empty($_SESSION['value_mensaje'])){ ?> <textarea class="form-control" name="mensagem"><?php echo $_SESSION['value_mensaje']; ?></textarea> <?php unset($_SESSION['value_mensaje']); }else{ ?> <textarea class="form-control" name="mensaje"></textarea> <?php } ?> <?php if(!empty($_SESSION['baulphp_mensaje'])){ echo "<p style='color: #f00; '>".$_SESSION['baulphp_mensaje']."</p>"; unset($_SESSION['baulphp_mensaje']); } ?> </div> </div> <input class="btn btn-success" type="submit" value="Enviar" onClick="return validar_form_contato()"> </form>
CONCLUSIÓN
Hoy en día la mayoría de sistemas ya posee esta opción, no solo exportar a Excel sino a varios programas externos. Por ejemplo, PDF, Word e incluso power point para lo cual se utiliza PHP como medio de poblar esos archivos extraídos de una base de datos.
Esto da al sistema web una dinámica para manejar la información de diferentes modos, si desean implementar dicha interfaz en sus sistemas aquí les dejo el paquete ya listo para que lo puedan descargar y hacer unas configuraciones con el tema de la conexión con la base de datos.
Muchas gracias por éste código!
Lo he usado para obtener mis consultas (incluso aguanta como 5 000 filas); pero por algún motivo, cuando se le solicitan cantidades enormes (yo lo traté de hacer con 361 533 y 354 404 filas para dos bases de datos distintas) marca que hay un «Fatal error: Out of memory (allocated 1061158912) (tried to allocate 140509208 bytes)». Supongo tiene que ver con las opciones de mi XAMPP, pero les comento, por si desde inicio el código no estuviera hecho para exportar cantidades masivas de filas.
Saludos!