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.
< ?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:
Después de ver la lista nos resta dar clic en el vinculo y nos mandara la descarga del archivo de Excel.
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.
En otro post les mostrare como expotar archivos al formato nativo desde PHP. Y el resultado final:
El codigo: Practicas Reportes Excel; Un Saludo.














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