Exportar a Excel con Adornos Fecha: 02/May/2005 (02 de Mayo de 2005)
|
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