La Web del Programador: Comunidad de Programadores
 
    Pregunta:  52790 - CREAR UN EXCEL A PARTIR DE PHP
Autor:  Javier García Márquez
Necesito saber cómo guardar los datos obtenidos con un código en php en un excel. Actualmente los saca por pantalla, pero me sería más útil guardarlos en un archivo de excel, y no tener que copiar lo que aparece en el text area y pegarlo en el excel que me creo yo mismo. ¿Se puede hacer esto? Muchas gracias.

  Respuesta:  Hildefonso Chaverra
El problema y creo que es lo que la gente quiere saber es como hacer las otras ojas dentro del archivo resultante, pues si tu consulta es de varias tablas no es lógico colocar la respuesta en la única hoja que crea.

<?php
$filename = "RESULTADOS.ODS";

// Cabecera para crear un archivo de OpenOffice la de excel es muy comun.

header("Content-Disposition: attachment; filename=$filename");
header("Content-Type: application/vnd.oasis.opendocument.spreadsheet");

$conexion = mysql_connect("localhost", "root", "");
mysql_select_db("ACTIVIDADES",$conexion);

$sql = "SELECT count(*) from ACTIVIDADES";
$result = mysql_query($sql);
$respuesta = mysql_fetch_array($result);
$hay_datos = $respuesta[0];
if ($hay_datos > 0){
echo "<table>
<tr>
<td colspan='4' align='center'><font color='blue'>LISTA DE ACTIVIDADES 2013</font></td>
</tr>
<tr>
<td align='center'>MES</td>
<td align='center'>ACTIVIDAD</td>
<td align='center'>TIEMPO ESTIMADO</td>
<td align='center'>RESPONSABLE</td>
</tr>";
$sql = "SELECT * from ACTIVIDADES";
$result = mysql_query($sql);
while($campos = mysql_fetch_array($result)){
echo "<tr>
<td>" . $campos['mes'] . "</td>
<td>" . $campos['descripcion'] . "</td>
<td>" . $campos['tduracion'] . "</td>
<td>" . $campos['instructor'] . "</td>
</tr>";
}
echo "</table>";
}
?>

  Respuesta:  Miguel Angel Flores Ticay
<?php
// Enviamos las cabeceras necesarias
header ("Content-type: application/vnd.ms-excel" );
header ("Content-Disposition: attachment; filename="hoja.xls"" );

?>

<table border="1" cellpadding="3" cellspacing="1">

<tr>

<td>Usuario</td>
<td>Nombre(s)</td>
<td>Apellidos</td>

</tr>

<tr>

<td>agarzon</td>
<td>Alexander</td>
<td>Garzon</td>

</tr>

<tr>

<td>xombra</td>
<td>Hector</td>
<td>A. Mantellini</td>

</tr>

</table>

  Respuesta:  Alejandro Bustamante
Javier García Márquez (me hace recordar a GABO).... bueno si lo que quieres es obtener el resultado de una tabla php en un excel, tienes que hacer una copia de tu archivo.php y tu codigo debe empezar con las siguientes lineas:

<?php
header("Content-Type: application/vnd.ms-excel");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");

además debes eliminar cualquier <tag> de html: <html><body><head><script>,etc.

Menos estas <style><table><tr><td> ya que excel interpreta las tablas y las reproduce exactamente igual... aunque los colores no los representa muy bien.

  Respuesta:  Nicolás González
Sí, claro que se puede.
Una alternativa sencilla es impripir en un archivo php una tabla normal de html pero con los encabezados de archivo excel, es decir:

header("Content-Type: application/vnd.ms-excel");
header("Content-Disposition: attachment; filename=tu_archivo.xls");
header("Pragma: no-cache");

El excel interpretará la tabla y te mostrará los resultados como cualquier archivo normal. Por supuesto que las tablas tienen algunas limitaciones, pero soportan borde, color de fondo y distintas fuentes (ingresas con el tag font de HTML, no por estilos).

Entonces, pegando este encabezado en el inicio de tu php, obtendrás un archivo excel para descargarte.