Exportar a Excel con Adornos

Fecha: 02/May/2005 (02 de Mayo de 2005)
Autor: Felipe A. Henríquez Durán

 


Hola que tal colegas, este es mi primer aporte, y espero que no sea el último, mi intención es compartir un desarrollo propio, el cual permite la exportación a excel de cuantos elementos queramos, no solo de una grilla, sino de todos los controles, textos, imagenes, etc. donde la imaginación y el código HTML nos lo permitan (Aunque está en C# pasarlos a VB como ya deben de saberlo es muy fácil ^.^):
Esto es el texto normal.

Sin más preambulos, el código:

//El siguiente trozo de código es el que iría en el evento Click del botón que usamos para detonar la exportación:
Response.Clear();
Response.Buffer = true;
Response.ContentType = "application/vnd.ms-excel";
Response.AddHeader("Content-Disposition", "attachment;filename=NombreArchivo.xls");
Response.Charset = "UTF-8";
Response.ContentEncoding = System.Text.Encoding.Default;
Response.Write(HTML()); //Llamada al procedimiento HTML
Response.End();

//El procedimiento HTML que se encarga de dar o mantener formatos según corresponda: public string HTML() { Page page1 = new Page(); HtmlForm form1 = new HtmlForm(); Grilla1.EnableViewState = false; if (Grilla1.DataSource != null) { Grilla1.DataBind(); } Grilla1.EnableViewState = false; page1.EnableViewState = false; page1.Controls.Add(form1); form1.Controls.Add(Grilla1); System.Text.StringBuilder builder1 = new System.Text.StringBuilder(); System.IO.StringWriter writer1 = new System.IO.StringWriter(builder1); HtmlTextWriter writer2 = new HtmlTextWriter(writer1); writer2.Write("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<title>Datos</title>\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\" />\n<style>\n</style>\n</head>\n<body>\n"); writer2.Write("<img src=http://enlace/a/Imagen.gif>"); writer2.Write("<table><tr><td></td><td></td><td><font face=Arial size=5><center>Título Principal</center></font></td></tr></table><br>"); writer2.Write("<table>\n<tr>\n<td></td><td class=TD width=35%><b>Fecha :</b></td><td width=65% align=left>" + TxtDate.Text.Trim() + "</td>\n</tr>\n<tr>\n<td></td><td class=TD><b>Gerencia:</b></td><td>" + DDLGerencia.SelectedItem.ToString().Trim() + "</td>\n</tr>\n</table>\n<br><br>"); page1.DesignerInitialize(); page1.RenderControl(writer2); writer2.Write("\n</body>\n</html>"); page1.Dispose(); page1 = null; return builder1.ToString(); }

A Tener en Cuenta.

  • Como se puede apreciar, lo unico complicado, está en el escribir código HTML de manera lineal, entonces mi sugerencia es que primero éste sea escrito de la manera tradicional, y una vez que cumpla con nuestras necesidades, lo cambiemos a la forma linear, reemplazando los interlineados por \n (si así se desea).
  • Se asume que existe un DataGrid llamado Grilla1

  • Espacios de nombres usados en el código de este artículo:

    System.Web.UI.WebControls
    System.Web.UI.HtmlControls


    ir al índice