Exportar tablas HTML a Excel con PHP y JQuery

22 COMENTARIOS -  Publicado hace 11 meses -  Clasificado en: , , , ,

En un post anterior vimos cómo usando una clase podíamos Crear hojas de cálculo Excel con PHP. En este post vamos a ver cómo utilizar jQuery para exportar los datos de una tabla a Excel. El tutorial es una adaptación de lo explicado en un post de TopSEMLTips. Lo primero que necesitamos es importar jQuery:

<script type="text/javascript" src="jquery-1.3.2.min.js"></script>

Lo siguiente es tener una tabla en HTML que deseamos exportar a Excel. Puesto que luego lo utilizaremos, necesitamos asignarle un identificador a la tabla, por ejemplo id="Exportar_a_Excel".

<table id="Exportar_a_Excel">
<tr>
     <td>Celda1</td>
     <td>Celda2</td>
     <td>Celda3</td>
     <td>Celda4</td>
     <td>Celda5</td>
</tr><tr>
     <td>Celda6</td>
     <td>Celda7</td>
     <td>Celda8</td>
     <td>Celda9</td>
     <td>Celda10</td>
</tr>
</table>

Lo siguiente es crear un formulario, también con un identificador para almacenar el contenido de la tabla en un campo oculto y posteriormente enviarlo al php que generará la hoja de cálculo.

<form action="ficheroExcel.php" method="post" target="_blank" id="FormularioExportacion">
<p>Exportar a Excel  <img src="export_to_excel.gif" class="botonExcel" /></p>
<input type="hidden" id="datos_a_enviar" name="datos_a_enviar" />
</form>

Ahora necesitaremos volcar toda la tabla en el campo oculto y enviar el formulario. Para ello nos servimos de jQuery:

<script language="javascript">
$(document).ready(function() {
     $(".botonExcel").click(function(event) {
     $("#datos_a_enviar").val( $("<div>").append( $("#Exportar_a_Excel").eq(0).clone()).html());
     $("#FormularioExportacion").submit();
});
});
</script>

El fichero php recogerá el contenido del campo oculto "datos_a_enviar" y lo mostrará con el content-type apropiado. Así pues, ficheroExcel.php sería:

<?php
header("Content-type: application/vnd.ms-excel; name='excel'");
header("Content-Disposition: filename=ficheroExcel.xls");
header("Pragma: no-cache");
header("Expires: 0");
echo $_POST['datos_a_enviar'];
?>

Ver ejemplo en funcionamiento » »

Descargar ejemplo completo » »

Algunas entradas relacionadas:

También te puede interesar:

COMENTARIOS

Publicado hace 12 meses
Javier Martinez -   http://www.publicacionesdigitales.net

En el ejemplo, se abre el excel, pero las tablas estan vacias...
Publicado hace 12 meses
Francisco -   http://www.webintenta.com

A mí se me abre la tabla con las celdas. Qué versión de Office tienes?
Publicado hace 11 meses
wilson zauma -  
sabes el ejemplo completo no esta disponible ademas en el ejemplo q muestras no graba la tabla solo graba el nombre del doc excel mas no los datos y eso no se xq. no se si puedes pasar un ejemplo un poco mas completo . gracias
Publicado hace 11 meses
Francisco -   http://www.webintenta.com

Corregido. Ya dispones el ejemplo completo para su descarga.

Saludos.
Publicado hace 11 meses
Miki -  
Hola. El ejemplo solamente me funciona en Chrome. En Mozilla, IE 6 y IE 7 no funcionan. Tengo Excel 2002.
Es una lástima porque me iría muy bien este script.
Gracias.
Publicado hace 11 meses
Francisco -   http://www.webintenta.com

Debe ser cosa de la versión de Excel.
Yo con Office 2007 me funciona correctamente en IE y Firefox.

Cuando tenga un rato haré un tutorial para exportar de PHP a CSV.

Saludos.
Publicado hace 11 meses
Miki -  
Hola de nuevo. Resulta que colgado en Internet si funciona en todos los navegadores. En localhost me pasa lo que he escrito antes (igual es cosa de mi ordenador). Bueno, mejor que funcione en el servidor remoto y no en local que viceversa.
Gracias Francisco, me gusta mucho tus posteos, sigue así.
Publicado hace 11 meses
Francisco -   http://www.webintenta.com

Me alegro de que al final te haya sido de utilidad.

Saludos.
Publicado hace 11 meses
Alvaro -  
Funciona con cualquier versión de excel y en localhost cuando se utiliza la función stripslashes() en la salida de "datos_a_enviar":

$tabla=$_POST['datos_a_enviar'];
echo stripslashes($tabla);

saludos
Publicado hace 10 meses
Ricardo -  
Hola!

A mi me funcionó de mil maravillas; tengo la Suite Office 2007 y cero rollo. Ahora, una pregunta, es posible hacer lo mismo per que el sistema extraiga la data almacenada en una base de datos MySQL y la exporte a un Excell?? ¿Y qué tal con hacer lo mismo pero con documentos Word y PDF??

Se que eso suele hacerse con librerías php, pero los ejemplos que he encontrado en diversos sitios son, por decir lo menos, muy malos e ineficientemente desarrollados.

Gracias y felicitaciones por tu magnífio sitio Web. Ya es mi favorito.
Publicado hace 9 meses
Juan Ruiz -  
Felicitaciones excelente tutorial me funciono muuy bien, pero tengo un problema. estoy haciendo consultas con mysql a una tabla determinada pero esta tabla x se me multiplica por varios datos entonces al momento de exportar a excel solo me muestra la primera tabla y las demas no, porque no me muestra las demas si tienen el mismo nombre?
Publicado hace 8 meses
CHRISTIAN -  
Juan, no se bien que es lo que deseas, pero por lo que entiendo, no has probado nombrar las tablas de diferente forma y llamar todas mediante el script? es lo que se me ocurre.

Ahora, yo tengo un pequeño problema, hay 2 campos que no deseo que se exporten, como lo hago? intente lo sig:

Imprimir esos 2 datos en otra tabla, el problema es que tengo otro script para poder "sortear" los datos, entonces cuando hago eso, dichos datos pierden congruencia, no se si me explique, ojala alguien haya hecho algo parecido, Fancisco, gracias por el post.

Saludos
Publicado hace 7 meses
CHRISTIAN -  
Solucione mi problema anterior, ahora tengo otro detalle, cuando doy clic para que genere el archivo, me cierra la sesion actual, como puedo solucionar esto?
Publicado hace 6 meses
Inti -  
Tambien me funciona solo en Chrome :(... que puede ser? plis necesito ayuda... es el mejor metodo que he encontrado pero no me funka en todos lados.. ayuda plisss
Publicado hace 6 meses
Inti -  
Hola, a mi me pasa lo que decia "Miki" de que solo se veia en Chrome, en internet, con su ejemplo y en mi servidor igual.. que puede ser?
Saludos
Publicado hace 5 meses
Pablo -   http://www.estudio.avilacamps.com.ar/

Necesitaría un script o herramienta que me convierta una tabla excel a html pero que sea interactiva, es decir que se puedan seguir utilizando las formulas e ingresando datos, saludos
Publicado hace 4 meses
estrick -  
Sabes. Acabo de probarlo y me funciona llevaba tiempo atorado buscando como exportar una simple tabla y no podia hacerlo y recien lo consegui gracias a tu ayuda.
Solo queda decir Gracias =)
Publicado hace 4 meses
sdarknot -  
alguien sabe como mostar el excel en un php por favor cualkier ayuda me la podrian mandar al msn sdarknot@gmail.com desde ya gracias xD .....
Publicado hace 3 meses
miguel -  
Buenísimo, hace días buscaba algo así. Sólo tengo un problema: Tildes y Ñ, alguna forma de resolverlo? En la exportación tildes y Ñ son reemplazadas por caracteres irreconocibles.
Nuevamente muchas gracias
Publicado hace 3 meses
christian -  
el script funciona perfecto, pero tengo un problema no me pasa todos los datos de la tabla solo unos 10 celdas, si me pueden ayudar, si sirve de algo la tabla la armo con la funcion sorttable de jquery
Publicado hace 2 meses
Rigo -  
El script me funciono perfectamente tanto en localhost como enel servidor, ademas funciona muy bien en IE y Mozilla, justo lo que necesitaba, me a horro mucho tiempo, ya que lo pensaba hacer solo con php. y volver hacer la consulta para generar la tabla nuevamente, que no le vi practico.

muchas gracias por el aporte.

Saludos
Publicado hace 1 mes
Jorge -  
Exelente... Me salvaste el ramo con esto.-. jajajajaj . Gracias por el aporte.
Publicado hace 1 mes
ricardo -  
No veo las fechas de los comentarios. Muy buen script!
Para Miguel por las ñ's y acentos:
echo stripslashes(utf8_decode($_POST['datos_a_enviar']));
Publicado hace 3 semanas
Jose Miguel -  
A mi me funciono perfecto, lo unico es que tengo un valor que viene desde la base de datos de la siguiente forma: 1-2 q no son fechas, pero cuando abro el documento en excel los coloca como 01-feb y esa celda se coloca en formato de fecha. Como hacer para que no pase esta situacion?
Publicado hace 3 semanas
Luis Rodrigo -  
Gracias por el aporte, pero yo lo uso en el wamp localmente con localost y todo funciona perfecto, pero cuando lo subo a mi sitio, aparece en blanco, me pueden ayudar por favor
Gracias
Haz un comentario

¡Gracias por dejar tu opinión! Por favor procura que tu comentarios sean apropiados respecto al tema tratado en la entrada; que no sean spam, u ofensivos, de otro modo, serán eliminados. Todos los comentarios serán moderados antes de su publicación por lo que su aparición en la web puede verse aplazada un cierto tiempo. Si deseas realizar algún comentario, crítica o sugerencia sobre la propia web puedes hacer a través de la siguiente dirección de correo: webintenta@webintenta.com