Exporta Datos Fácilmente desde PHP a Excel

Add a comment February 19th, 2010

Hola, bienvenidos de nuevo al blog, en posts anteriores de SQLeros, habíamos visto como hacer CRUD, gracias al post de Luda, y ahora les traigo una forma fácil y muy rápida de hacer reportes de los datos hacia Excel.

Basicamente se trata de tomar el contenido de una tabla dinámica generada a partir de datos de la DB en mi caso MySQL, formateados con CSS, dándole presentación a los datos, para finalmente agregarle el envase de Excel.

¡Empezamos!, Ahora como primer paso tomaremos nuestro editor preferido para mi caso usare el ya tan afamado y superpoderoso Notepad++, o ya de perdido el Notepad, en fin, es indiferente. Para mi caso:

Creare un nuevo documento con el nombre “index.php”, en el cual pondré el codigo que veremos a continuación.

< ?php
mysql_connect(localhost, "farmacia", "farmacia2010") or die(mysql_error());
mysql_select_db("farmacia") or die(mysql_error());
?>
< ?xml version="1.0" encoding="utf-8"?>
< !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" xml:lang="en" lang="en">
<head>
<link rel="stylesheet" type="text/css" href="Estilo.css" />
<title>Farmacias SQLeros.Net[Ejemplo PHP2Excel]</title>
</head>
<body onload="">
<div id="Cabecera" align="center">
< ?php
//Creamos la sentencia SQL para ver el listado de productos de la base de datos
$consulta="SELECT * FROM listaproductos l";
//Ejecutamos la consulta. Y obtenemos un Resultset
$tabla = mysql_query($consulta);
//Recorremos los registros de la BD. Uno a uno para cargar los datos. Tambien creamos la variable $hojaExcel para dar formato al listado
$hojaExcel="<table>\n\t<tr>\n\t<th colspan=\"7\">Listado de Productos</th>\n</tr>\n";
while($registro = mysql_fetch_array($tabla))
{
//ahora daremos algo de presentacion para elaborar el formato a excel.
$hojaExcel.="<tr>\n\t<td>".$registro['codigo']."</td>";
$hojaExcel.="<td>".$registro['nombreComercial']."</td>";
$hojaExcel.="<td>".$registro['proveedor']."</td>";
$hojaExcel.="<td>". $registro['presentacion']."</td>";
$hojaExcel.="<td>".$registro['caducidad']."</td>";
$hojaExcel.="<td>".$registro['existenciaTotal']."</td>";
$hojaExcel.="<td>".$registro['precioPublico']."</td>\n</tr>\n";
}
$hojaExcel.="\n";
//Liberamos el recurso es decir salimos del bloqueo de la tabla.
mysql_free_result($tabla);
//Esta sera la vista de la tabla, Sencillo, no!?
echo $hojaExcel;
?>
<a href="ListaProductos.php"><img src="excel.png" width="36" height="36" alt="Exportar a Microsoft Excel" /><br />Exportar a Microsoft Excel</a>
</div>
</body>
</html>

Ahora despues crear el codigo para el index, crearemos el archivo “ListaProductos.php” que tendra el sig codigo.

< ?php
//Esta sera la vista de la tabla, Sencillo, no!? Con esto le indicamos las cabeceras de Excel.
header('Content-type: application/vnd.ms-excel');
header("Content-Disposition: attachment; filename=ListaProductos.xls;charset=utf-8");
header("Pragma: no-cache");
header("Expires: 0");
?>

<style>
table { background:#D3E4E5;
border:1px solid gray;
border-collapse:collapse;
color:#fff;
font:normal 12px verdana, arial, helvetica, sans-serif;
}
caption { border:1px solid #5C443A;
color:#5C443A;
font-weight:bold;
letter-spacing:20px;
padding:6px 4px 8px 0px;
text-align:center;
text-transform:uppercase;
}
td, th { color:#363636;
padding:.4em;
}
tr { border:1px dotted gray;
}
thead th, tfoot th { background:#5C443A;
color:#FFFFFF;
padding:3px 10px 3px 10px;
text-align:left;
text-transform:uppercase;
}
tbody td a { color:#363636;
text-decoration:none;
}
tbody td a:visited { color:gray;
text-decoration:line-through;
}
tbody td a:hover { text-decoration:underline;
}
tbody th a { color:#363636;
font-weight:normal;
text-decoration:none;
}
tbody th a:hover { color:#363636;
}
tbody td+td+td+td a { background-image:url('bullet_blue.png');
background-position:left center;
background-repeat:no-repeat;
color:#03476F;
padding-left:15px;
}
tbody td+td+td+td a:visited { background-image:url('bullet_white.png');
background-position:left center;
background-repeat:no-repeat;
}
tbody th, tbody td { text-align:left;
vertical-align:top;
}
tfoot td { background:#5C443A;
color:#FFFFFF;
padding-top:3px;
}
.odd { background:#fff;
}
tbody tr:hover { background:#99BCBF;
border:1px solid #03476F;
color:#000000;
}
</style>
< ?php
//Creamos la conexion.
mysql_connect(localhost, "farmacia", "farmacia2010") or die(mysql_error());
mysql_select_db("farmacia") or die(mysql_error());
//Creamos la sentencia SQL para ver el listado de productos
$consulta="SELECT * FROM listaproductos l";
//Ejecutamos la consulta.
$tabla = mysql_query($consulta);
//Recorremos los registros de la BD.
$hojaExcel="<table>\n";
while($registro = mysql_fetch_array($tabla))
{
//ahora daremos algo de presentacion para elaborar el formato a excel.
$hojaExcel.="<tr>\n\t<td>".$registro['codigo']."</td>";
$hojaExcel.="<td>".$registro['nombreComercial']."</td>";
$hojaExcel.="<td>".$registro['proveedor']."</td>";
$hojaExcel.="<td>". $registro['presentacion']."</td>";
$hojaExcel.="<td>".$registro['caducidad']."</td>";
$hojaExcel.="<td>".$registro['existenciaTotal']."</td>";
$hojaExcel.="<td>".$registro['precioPublico']."</td>\n</tr>\n";
}
$hojaExcel.="";
//Liberamos el recurso es decir salimos del bloqueo de la tabla.
mysql_free_result($tabla);
echo utf8_decode($hojaExcel);
?>

La vista de la pagina quedaría de la siguiente manera:

Lista de productos

Lista de productos

Después de ver la lista nos resta dar clic en el vinculo y nos mandara la descarga del archivo de Excel.

Descarga Archivo

ListaProductos.xls

Solo nos resta visualizar el archivo.

Nota: En Excel 2007, marca una advertencia de seguridad. Basta con dar clic en Aceptar para que lo abra. En versiones anteriores no hay ningun problema.

Warning en Excel 2007

Abriendo el Archivo

En otro post les mostrare como expotar archivos al formato nativo desde PHP. Y el resultado final:

Archivo Abierto

Archivo Abierto

El codigo: Practicas Reportes Excel; Un Saludo.

  1. June 2nd, 2010 at 22:13 | #1
    abraham

    Hola si me exporta a excel pero solo me repite el ultimo registro en web sale la consulto perfecto peroen excel no me salen compketos los registros me ayudas mi msn es branimlm@hotmail.com

  2. June 3rd, 2010 at 00:24 | #2

    Bueno amigo en el ejemplo que esta en la página, ¿ese si funciona bien? Si no, te funciona estaría muy bien que publicaras tu consulta o las modificaciones del código, ya sabes :) Estamos para ayudarte.

  1. No trackbacks yet.
Comments feed

Spam Protection by WP-SpamFree