Inicio ¿Sidebar? RSS @MisAlgoritmos at Twitter

Exportar registros a Excel automáticamente con PHP

Últimamente he trabajado con aplicaciones de registro de usuarios para distintos eventos, y una de las funcionalidades principales que requieren estos sistemas es la exportación en formato XLS (o de Excel) de toda la información, por lo que en este post les explicaré el procedimiento que utilizo para crear estos listados en formato excel.

Existen varias formas de conseguir crear estos archivos, y una de ellas es utilizar librerías disponibles en PEAR, o la muchas otras librerías que andan por ahí sueltas en la web, aunque para mi el paso mas sencillo y lmpio es: para cada de celda insertar un tabulador (\t) y para cada cambio de fila un salto de línea (\n).

Por ejemplo, para la siguiente tabla convertirla en un archivo Excel:

unodostrescuatrocincoseis
sieteochonuevediezonce4
docetrececatorcequince46ah

Sería de la siguiente forma: A cada dato agregarle un tabulador después de que termina la celda, y al final de cada línea un salto del línea.

  1. <?
  2. echo "uno\tdos\ttres\tcuatro\tcinco\tseis\t\n";
  3. echo "siete\tocho\tnueve\tdiez\tonce\t4\t\n";
  4. echo "doce\ttrece\tcatorce\tquince\t46\tah\t\n";
  5. ?>

El código anterior si lo copiamos y guardamos en un archivo prueba.xls y lo abrimos en Excel, este ya lo interpretará en el formato de filas y columnas.

Ahora para que el código anterior funcione, forzamos enviamos al navegador headers identificando la salida de datos como un archivo de excel, y además forzamos la descarga para que este archivo pueda ser guardado.

  1. <?
  2. header ("Expires: Mon, 26 Jul 1997 05:00:00 GMT");  
  3. header ("Last-Modified: " . gmdate("D,d M YH:i:s") . " GMT");  
  4. header ("Cache-Control: no-cache, must-revalidate");  
  5. header ("Pragma: no-cache");  
  6. header ("Content-type: application/x-msexcel");  
  7. header ("Content-Disposition: attachment; filename=\"prueba.xls\"" );
  8.  
  9. echo "uno\tdos\ttres\tcuatro\tcinco\tseis\t\n";
  10. echo "siete\tocho\tnueve\tdiez\tonce\t4\t\n";
  11. echo "doce\ttrece\tcatorce\tquince\t46\tah\t\n";
  12. ?>

Otra forma de crear archivos legibles por Excel, es el formato CSV. Este formato para cada cambio de dato en lugar de un tabulador se inserta un ; (punto y coma), y para cada cambio de fila un salto de línea.

El ejemplo anterior para exportarlo en CSV, sería así:

  1. <?
  2. header ("Expires: Mon, 26 Jul 1997 05:00:00 GMT");  
  3. header ("Last-Modified: " . gmdate("D,d M YH:i:s") . " GMT");  
  4. header ("Cache-Control: no-cache, must-revalidate");  
  5. header ("Pragma: no-cache");  
  6. header("Content-type: application/vnd.ms-excel");
  7. header ("Content-Disposition: attachment; filename=\"prueba.csv\"" );
  8.  
  9. echo "uno;dos;tres;cuatro;cinco;seis;\n";
  10. echo "siete;ocho;nueve;diez;once;4;\n";
  11. echo "doce;trece;catorce;quince;46;ah;\n";
  12. ?>

Todo lo anterior es sólo demostración: Si quisieramos exportar una base de datos, habría que recorrer cada uno de los registros e irlos mostrando en alguno de los 2 formatos anteriores para y así tendremos un archivo legible por excel.

Nota: Si se exporta gran cantidades de registros, es recomendable comprimir los la información en algun formato. Yo utilizo compresión en Zip, y me ha funcionado bastante bien.

14 comentarios en Exportar registros a Excel automáticamente con PHP

sheryl

hola lo q deseo saber es yo prove abrir un archivo de txt; osea abri una hoja excel guarde como arriba porf.txt
y a bajo puse csv(delimitado por comas ) y no le nada
por fa espero su respuesta

Néstor

Hola,
Muchas gracias por el artículo, yo en su momento lo hice con una libreria, pero veo que lo pude haber hecho de una forma más sencilla.

Néstor

Néstor

Hola
Muchas gracias por el artículo. Hace ya un tiempo necesitaba hacerlo y lo hice con una clase que encontre googleando, pero veo que era mucho más sencillo de lo que me pensaba.
Lo que no sabía era lo de separar en celdas, y claro con un tabulador, en fin, .. ha veces te rompes la cabeza con tonterias como estas.

Néstor

rodolfo

gracias por tu codigo sirvio me sacaste de un apuro

Jero

Hola! Muchas gracias por el script, me salvaste las papas. Te hago una consulta, cómo hago para que el excel me tome los caracteres especiales como "¿" o los acentos?

Saludos!!

Ness Gama

Buen aporte, solo aclarar que en el CSV el separador debe ser la coma

echo "uno,dos,tres,cuatro,cinco,seis,n";
echo "siete,ocho,nueve,diez,once,4,n";
echo "doce,trece,catorce,quince,46,ah,n";

saludos

Victor De la Rocha

Jero, prueba utf8_decode antes de mandar con echo la información.

Victor De la Rocha

Ness Gama tienes razón, gracias por la aclaración.

Fitorec

Otra seria la notación de tablas HTML.

luisme

Hola gente, muchas gracias por el artículo y por las aclaratorias en el foro.... defenitivamtne entre todos podemos hacer mucho!!! Éxitos!!!!!! ;-)

chenteb

llegue a pensar que esto de la exportacion de datos a excel desde php seria algo muy complejo pero me han dejado perplejo con la simplicidad, gracias y muy buen aporte me sacara de apuros

Jenny

Hola mucho gusto, quisiera exportar algunos campos de una base de datos de oracle a un formato tipo CVS o SQL o MySQL, por ejemplo: necesito los campos de nombre, apellido, no. de identificación de esta base de datos no todos y tenerlos en un formato diferente para poder hacer querys o comparar datos de otra base, se puede?

alma

hola...
me quisieran decir que en un algoritmo

Ana Rivera

Hola, que buen aporte, me salió a la primera, estos ejemplos son los que me gustan faciles, amigables, entendibles y sobre todo funcionales muy bien, felicidades colega!.

Deja un comentario

¿Cuanto es 2 + 3 - 5? =

Suscribirse a los comentarios.