Exporta Datos Fácilmente desde PHP a Excel

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.




[sourcecode language="php"]
< ?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">



Farmacias SQLeros.Net[Ejemplo PHP2Excel]



< ?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="\n\t\n\t\n\n";
while($registro = mysql_fetch_array($tabla))
{
//ahora daremos algo de presentacion para elaborar el formato a excel.
$hojaExcel.="\n\t";
$hojaExcel.="";
$hojaExcel.="";
$hojaExcel.="";
$hojaExcel.="";
$hojaExcel.="";
$hojaExcel.="\n\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;
?>
Exportar a Microsoft Excel
Exportar a Microsoft Excel




[/sourcecode]

Ahora despues crear el codigo para el index, crearemos el archivo "ListaProductos.php" que tendra el sig codigo.
[sourcecode language="php"]
< ?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");
?>

[/sourcecode]

[sourcecode lang="css"]



[/sourcecode]

[sourcecode lang="php"]
< ?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="
Listado de Productos
".$registro['codigo']."".$registro['nombreComercial']."".$registro['proveedor']."". $registro['presentacion']."".$registro['caducidad']."".$registro['existenciaTotal']."".$registro['precioPublico']."
\n";
while($registro = mysql_fetch_array($tabla))
{
//ahora daremos algo de presentacion para elaborar el formato a excel.
$hojaExcel.="\n\t";
$hojaExcel.="";
$hojaExcel.="";
$hojaExcel.="";
$hojaExcel.="";
$hojaExcel.="";
$hojaExcel.="\n\n";
}
$hojaExcel.="";
//Liberamos el recurso es decir salimos del bloqueo de la tabla.
mysql_free_result($tabla);
echo utf8_decode($hojaExcel);
?>
[/sourcecode]

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

[caption id="attachment_229" align="aligncenter" width="300" caption="Lista de productos"]Lista de productos[/caption]

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





[caption id="attachment_231" align="aligncenter" width="300" caption="ListaProductos.xls"]Descarga Archivo[/caption]

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.

[caption id="attachment_232" align="aligncenter" width="300" caption="Abriendo el Archivo"]Warning en Excel 2007[/caption]

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

[caption id="attachment_233" align="aligncenter" width="300" caption="Archivo Abierto"]Archivo Abierto[/caption]

El codigo: Practicas Reportes Excel; Un Saludo.

4 comentarios:

  1. 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

    ResponderEliminar
  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.

    ResponderEliminar
  3. Chavo, me has salvado la vida, encontré miles de páginas con el mismo ejemplo pero si las cadenas de texto eran largas se perdían los datos y nunca nadie respondió como corregirlo y no lo logré yo, pero con este ejemplo todo funcionó a la 1a (solo el detalle de los caracteres especiales en la página index, pero algo súper fácil de corregir)

    ¡EXCELENTE!

    ResponderEliminar
  4. Me da mucho gusto que te haya sido de utilidad el ejemplo, Saludos :)

    ResponderEliminar

".$registro['codigo']."".$registro['nombreComercial']."".$registro['proveedor']."". $registro['presentacion']."".$registro['caducidad']."".$registro['existenciaTotal']."".$registro['precioPublico']."