Muchas veces nos hemos encontrado con la necesidad de exportar información de una tabla en nuestra base de datos a una hoja de Excel para generar informes o hacer cálculos extra, a continuación veremos cómo podemos exportar la consulta de una base de datos a un archivo Excel.
Que necesitamos?
- Necesitamos un script php el cual va a generar la consulta a la base de datos y luego va a generar un archivo .xls
- Necesitamos tener la tabla que queremos exportar en nuestra base de datos.
- Servidor WEB para correr el script PHP.
Proceso
El proceso es muy sencillo, vamos a darle un criterio a nuestra consulta para no exportar toda la información de la tabla. Para efectos de este tutorial utilizaremos la fecha.
Base de Datos.
Vamos a crear una base de datos en donde tendremos una tabla llamada ventas con los siguientes campos.
ID | Ventas_dia | Fecha |
Sera el identificador del registro, nuestra llave primaria y se autoincrementara. Formato INT | Supongamos que de otro script se está guardando esta información , con cada una de las ventas del día, el formato es DOUBLE para poder guardar decimales | Supongamos que dicho script esta guardando la fecha a la que pertenece el registro de ventas. El formato es DATE |
SQL para la creación de la tabla
CREATE TABLE `ventas` (
`id` INT NOT NULL AUTO_INCREMENT ,
`Ventas_dia` DOUBLE NOT NULL ,
`fecha` DATE NOT NULL ,
PRIMARY KEY ( `id` )
) ENGINE = MYISAM ;
Una vez tenemos la tabla creada vamos a insertar algunos valores para poder probar nuestro script.
INSERT INTO `ventas` (`id`, `Ventas_dia`, `fecha`) VALUES (NULL, ’234500′, ’2011-04-09′), (NULL, ’530890′, ’2011-04-09′);
Ahora que ya tenemos datos en nuestra tabla para poder probar nuestro script, vamos a crear 2 archivos PHP:
Fecha.php | Reporte.php |
Este archivo será el encargado de mostrar las fechas disponibles en los registros de la base de datos para escoger el día del cual queremos exportar la información. | Este archivo recogerá el criterio fecha y lo utilizara para limitar la consulta a solo los registros que tengan esa fecha y luego generara el archivo Excel con la información recuperada. |
Fecha.php
Creamos un formulario para enviar la información a reporte.php
<form action=”reporte.php” method=”post”>
<label>Escoja la fecha</label><br /><br />
<select name=”date”>
<?php
//hacemos una conexión a nuestro servidor MySQL para poder recuperar las fechas disponibles, cambie los datos de la conexión de acuerdo a los que se acomoden a su servidor.
$conexio = mysql_connect(“localhost”,”usuariotest”,”123456″);
//realizamos la consulta
// Noten que estoy escribiendo select distinct que lo que hace es buscar un valor en la base de datos pero no trae los que se repiten en el caso de la fecha sabes que se repite porque hay varios registros en la tabla, pero no queremos traer cada uno de los registros con esa fecha, solo me interesa traer la fecha 1 vez ya que será nuestro criterio de búsqueda.
$sql = mysql_query(“select distinct fecha from tutoriales.ventas order by fecha DESC”,$conexio);
//una vez tenemos loa resultados vamos a colocarlos en un array y vamos a hacer un loop para imprimir cada resultado en la opción
while($row = mysql_fetch_array($sql)){
echo “<option>$row[fecha]</option>”;
}
?>
</select>
<input name=”" type=”submit” value=”Enviar” />
</form>
Reporte.php
<?php
//insertamos los headers que van a generar el archivo excel
header(‘Content-type: application/vnd.ms-excel’);
//en filename vamos a colocar el nombre con el que el archivo xls sera generado
header(“Content-Disposition: attachment; filename=ventas.xls”);
header(“Pragma: no-cache”);
header(“Expires: 0″);
//recogemos la variable de fecha con la que limitaremos la cinsulta.
$fecha = $_POST['date'];
//hacemos la conexion al servidor MySql
$conexio = mysql_connect(“localhost”,”usuariotest”,”123456″);
//realizamos la consulta
$sql = mysql_query(“select * from tutoriales.ventas where fecha = ‘$fecha’”,$conexio);
?>
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
<html xmlns=”http://www.w3.org/1999/xhtml”>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ />
<title>Reporte de ventas</title>
</head>
<body><!–Vamos a crear una tabla que será impresa en el archivo excel –>
<table width=”600″ border=”0″>
<tr>
<th width=”600″>
<!–Imprimimos un titulo –>
<div style=”color:#003; text-align:center; text-shadow:#666;”><font size=”+2″>Reporte de Ventas <br /><?php echo $fecha ?></font></div></th>
</tr>
</table>
<!–creamos la tabla de el reporte con border 1 y los títulos–>
<table width=”641″ border=”1″>
<tr>
<th width=”50%” style=”background-color:#006; text-align:center; color:#FFF”><strong>Ventas</strong></th>
<th width=”50%” style=”background-color:#006; text-align:center; color:#FFF”><strong>Fecha</strong></th>
</tr>
<?php
// Un proceso repetitivo para imprimir cada uno de los registros.
while($row = mysql_fetch_array($sql)){
echo ”
<tr>
<td bgcolor=\”#ededed\” align=\”center\”>$row[Ventas_dia]</td>
<td bgcolor=\”#ededed\” align=\”center\”>$row[fecha]</td>
</tr>”;
}
?>
</table>
</body>
</html>
Ahora que ya tenemos los scripts que necesitamos corremos los archivos en nuestro servidor web y obtenemos el archivo excel