Muchas veces debemos ser capaces de exportaciones a Excel que contengan datos de nuestra aplicación.
El problema es que los libros de Excel con extensión .xls son archivos binarios. Si tenemos suerte y la máquina es Windows, y tiene instalado Microsoft Excel, podremos usar los controles ActiveX de éste para generar los archivos.
Si no, tendremos que implementar, o utilizar algunas de la librería que permiten acceder a archivos binarios de Excel. Lo que nos dará bastantes quebraderos de cabeza; o bien conformarnos con una exportación a CSV.
El caso es que de casualidad, viendo la exportación a Excel de phpMyAdmin, he visto que se pueden generar hojas de Excel, utilizando XML con una DTD concreta. Lo que facilita muchísimo la programación.
La cosas sería más o menos así:
<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40">
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="Content-type" content="text/html;charset=iso-8859-1" />
<style id="Classeur1_16681_Styles"></style>
</head>
<body>
<div id="Classeur1_16681" align=center x:publishsource="Excel">
<table x:str border=0 cellpadding=0 cellspacing=0 style='border-collapse: collapse'>
<tr>
<td>Celda A1</td>
<td>Celda B1</td>
<td>Celda C1</td>
</tr>
<tr>
<td>Celda A2</td>
<td>Celda B2</td>
<td>Celda C2</td>
</tr>
<tr>
<td>Celda A3</td>
<td>Celda B3</td>
<td>Celda C3</td>
</tr>
</table>
</div>
</body>
</html>
Los archivos así generados, funcionan sin problemas con Excel 2000 y superiores.
Puedes descargar el ejemplo (2 Kb. en formato XLS), y visualizarlo con cualquier editor de textos, para hacerte una idea de como funciona este enfoque.
El principal problema de esta solución, es que los libros así creados, no funcionan con normalidad en OpenOffice. Al menos no con la versión 2.0.
Es mas solo con escribir la parte de la tabla vale.
Te refieres a que no hace falta del <div>, o que tampoco hace falta el <head>, <body>, …?
El div seguro que no hace falta, yo hacia asi las exportaciones a Excel, le ponia un <html><head><title>algo</title></head><body>la tabla <table>…</table></body></html> y funcionaba.
También tenía un doc donde se ponia el estilo y formateaba numeros y caracteres normales.
que buen dato!! muchas gracias!! 😀
Hola Javier,
He probado tu ejemplo y a mi no me funciona, no consigo que aparezca un arxivo XLS, sino que me aprece una tabla HTML normal.
Yo utilizo para crerar arxivos EXCEL dinamicamente, PHP, que puede usar una cabecera header('Content-type: application/vnd.ms-excel');
Aqui teneis un ejemplo obtenido de [url]http://www.el-programador.com/index.php/topic,9.0.html[/url]
Un saludo a todos,
Narref (Recursteca)
[url]http://phobos.xtec.net/fmas/blog/[/url]
narref, a pesar de que tu documento HTML no está bien definido, le faltan el body y el html, a mi me ha funcionado correctamente con PHP 5, abriéndolo con Excel 2003.
¿Qué versiones usas?