¿Cómo puedo exportar tablas a Excel desde una página web? Quiero que la exportación contenga todo el formato y los colores.
Esto es un php pero tal vez puedas cambiarlo a javascript:
<?php>
$colgroup = str_repeat("<col width=86>",5);
$data = "";
$time = date("M d, y g:ia");
$excel = "<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=utf-8\" />
<style id=\"Classeur1_16681_Styles\">
.xl4566 {
color: red;
}
</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\">
<colgroup>$colgroup</colgroup>
<tr><td class=xl2216681><b>Col1</b></td><td class=xl2216681><b>Col2</b></td><td class=xl2216681 ><b>Col3</b></td><td class=xl2216681 ><b>Col4</b></td><td class=xl2216681 ><b>Col5</b></td></tr>
<tr><td class=xl4566>1</td><td>2</td><td>3</td><td>4</td><td>5</td></tr>
</table>
</div>
</body>
</html>";
$fname = "Export".time().".xls";
$file = fopen($fname,"w+");
fwrite($file,$excel);
fclose($file);
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment; filename="'.basename($fname).'"');
readfile($fname);
unlink($fname); ?>
Esto es en realidad más simple de lo que usted ' d pensar: "Sólo " copiar la tabla HTML (es decir: El código HTML para la tabla) en el portapapeles. Excel sabe cómo decodificar las tablas HTML; incluso intentará conservar los atributos.
La parte difícil es "copiar la tabla en el portapapeles" ya que no hay una forma estándar de acceder al portapapeles desde JavaScript. Ver esta entrada del blog: Acceso al portapapeles del sistema con JavaScript - ¿Un Santo Grial?
Ahora todo lo que necesitas es la tabla como HTML. Sugiero jQuery y el método html().
En la práctica, hay dos maneras de hacerlo de forma automática, mientras que sólo una solución se puede utilizar en todos los navegadores. En primer lugar, debe utilizar la especificación xml abierta para construir la hoja de Excel. Hay plugins gratuitos de Microsoft disponibles que hacen que este formato también esté disponible para las versiones más antiguas de office. El xml abierto es estándar desde office 2007. Las dos formas son, obviamente, el lado del servidor o el lado del cliente.
La implementación del lado del cliente utiliza un nuevo estándar de CSS que le permite almacenar datos en lugar de sólo la URL de los datos. Este es un gran enfoque coz usted no necesita ningún servercall, sólo los datos y algunos javascript. La desventaja es que Microsoft no soporta todas las partes en las versiones actuales de IE (no sé sobre IE9). Microsoft restringe los datos para que sean una imagen pero necesitaremos un documento. En firefox funciona bastante bien. Para mí, el IE fue el punto de matar.
La otra forma es usar una implementación del lado del servidor. Debe haber muchas implementaciones de XML abierto para todos los idiomas. Sólo tienes que agarrar una. En la mayoría de los casos será la forma más sencilla de modificar un Viewmodel para que resulte en un Documento pero seguro que puedes enviar todos los datos del Clientside de vuelta al servidor y hacer lo mismo.