Foros del Web » Programando para Internet » ASPX (.net) »

Como exportar un grid view a excel asp.net 2.0 (Solución)

Estas en el tema de Como exportar un grid view a excel asp.net 2.0 (Solución) en el foro de ASPX (.net) en Foros del Web. Hola a todos, pues quiero compartirles la solución a un problema que aveces enfrentamos los desarrolladores, al requerir exportar un gridview que se encuentre dentro ...
  #1 (permalink)  
Antiguo 17/02/2010, 19:15
 
Fecha de Ingreso: octubre-2008
Mensajes: 61
Antigüedad: 15 años, 5 meses
Puntos: 0
Como exportar un grid view a excel asp.net 2.0 (Solución)

Hola a todos, pues quiero compartirles la solución a un problema que aveces enfrentamos los desarrolladores, al requerir exportar un gridview que se encuentre dentro de una página asp.net 2.0 a excel,

Soluciones en internet hay varias, pero todas (almenos las que encontré) llevan al mismo callejón sin salida, y se preguntarán ¿por que?.

Bien pues la solución más comun que encontraran en Internet consiste en lo siguinente
  1. Crear en tiempo de ejecución una página web html
  2. En la página creada pasar el grid view como una tabla HTML
  3. Regresa esa página al usuario cambiando la extención a .xls en vez de html
  4. excel lo abre como si fuese un archivo de excel

Como lo pueden ver en todas estas direcciones

Código:
http://geeks.ms/blogs/gperez/archive/2007/07/26/exportar-gridview-a-excel.aspx
http://www.buayacorp.com/archivos/exportar-el-contenido-de-un-gridview-a-excel/
http://csanchezg.spaces.live.com/blog/cns!41C0BFBBFE8E1519!178.entry
http://www.arzion.com/empresa-de-internet/posts/Exportar-un-GridView-a-formato-Excel-con-ASPnet
http://www.aspxcode.net/free-asp-net-data-sample-source-code.aspx?Topics=How%20to%20Export%20GridView%20to%20Excel
Pero que sucede, que realmente siempre es y será un archivo html , hasta que el usuario lo guarde como un archivo de excel (lo cual está mal pues html no es un formato nativo de excel).

Bien pues descubrí otra manera de poder hacerlo con un viejo código en javascript, que lo que hace es crear un verdadero archivo con el formato de excel.

bien pues aquí está el código:

En el aspx en el que tenemos el grid view que vamos a exportar, colocamos el siguiente código

Código:
   
<script type="text/javascript">
function exportToXL(eSrc)
{
 var oExcel; 
 var oExcelSheet; 
 var oWkBooks;
 var cols; 
 oExcel = new ActiveXObject('Excel.Application');
 oWkBooks = oExcel.Workbooks.Add;
 oExcelSheet = oWkBooks.Worksheets(1);
 oExcelSheet.Activate();
 if (eSrc.tagName != 'TABLE')
 {
  alert('No ha sido posible exportar la tabla a excell');
  return false;
 }
 cols = Math.ceil(eSrc.cells.length / eSrc.rows.length);
 for (var i = 0; i < eSrc.cells.length; i ++)
 {
  var c, r;
  r = Math.ceil((i+1) / cols);
  c = (i+1)-((r-1)*cols)
  if (eSrc.cells(i).tagName == 'th') 
  { 
   oExcel.ActiveSheet.Cells(r,c).Font.Bold = true;
   oExcel.ActiveSheet.Cells(r,c).Interior.Color = 14474460; 
  }
  if (eSrc.cells(i).childNodes.length > 0 && eSrc.cells(i).childNodes(0).tagName == "B") 
   oExcel.ActiveSheet.Cells(r,c).Font.Bold = true;
   oExcel.ActiveSheet.Cells(r,c).Value = eSrc.cells(i).innerText;
 }
 oExcelSheet.Application.Visible = true;
}
</script>

después agregamos un botón al cual no hay que ponerle ninguna gota de código, simplemente localicemos su propiedad OnClientClick y en ella colocamos el siguiente código Javascript.

Código:
exportToXL(GridView1)
Es muy importante respetar mayúsculas y minúsculas en el nombre del gridview ya que al parecer si uno no coloca el nombre incorrecto aunque sea por una mayúscula luego no funciona.

Después de ello ejecuten y vean los resultados

Nota importante: Deben de habilitar los controles ActiveX en el navegador ya que si no no funciona y al parecer esto no funciona en mozilla a ver si alguien encuentra la solución, saludos espero que esto le sirva a alguien , Saludos
  #2 (permalink)  
Antiguo 02/07/2010, 05:57
 
Fecha de Ingreso: julio-2010
Mensajes: 2
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Como exportar un grid view a excel asp.net 2.0 (Solución)

Hola!
A ver si me podeis ayudar con esto. Tengo Un gridView en el que algunas columnas son de tipo Template field dónde yo agrego dropdownList para insertar ciertos datos de un origen de datos y ademas esos valores no son editables . El problema es que al importar a Excel 97 no me coge los valores de esas columnas del gridView poníendomelas vacías en el excel.
El código que utilizo para exportar a excel es el siguiente:

Dim sb As StringBuilder = New StringBuilder()
Dim sw As StringWriter = New StringWriter(sb)
Dim htw As HtmlTextWriter = New HtmlTextWriter(sw)
Dim pagina As Page = New Page
Dim form = New HtmlForm
GVDetailedLM.EnableViewState = False
pagina.EnableEventValidation = False
pagina.DesignerInitialize()
pagina.Controls.Add(form)
form.Controls.Add(GVDetailedLM)
pagina.RenderControl(htw)
Response.Clear()
Response.Buffer = True
Response.ContentType = "application/vnd.ms-excel"
Response.AddHeader("Content-Disposition", "attachment;filename=fichero".xls")
Response.Charset = ""
Response.ContentEncoding = Encoding.Default
Response.Write(sb.ToString())
Response.End()

Gracias de antemano!!
  #3 (permalink)  
Antiguo 20/06/2016, 08:00
 
Fecha de Ingreso: junio-2016
Mensajes: 4
Antigüedad: 7 años, 10 meses
Puntos: 0
Respuesta: Como exportar un grid view a excel asp.net 2.0 (Solución)

Hola que tal, yo uso este codigo
private void exportar()
{
Response.Clear();
Response.Buffer = true;
Response.AddHeader("content-disposition", "attachment;filename="+txtNumer.Text+".xls");
Response.Charset = "";
Response.ContentType = "application/vnd.ms-excel";
using (StringWriter sw = new StringWriter())
{
HtmlTextWriter hw = new HtmlTextWriter(sw);

To Export all pages
GridView1.AllowPaging = false;
this.llenaGrid();

GridView1.HeaderRow.BackColor = Color.White;
foreach (TableCell cell in GridView1.HeaderRow.Cells)
{
cell.BackColor = GridView1.HeaderStyle.BackColor;
}
foreach (GridViewRow row in GridView1.Rows)
{
row.BackColor = Color.White;
foreach (TableCell cell in row.Cells)
{
if (row.RowIndex % 2 == 0)
{
cell.BackColor = GridView1.AlternatingRowStyle.BackColor;
}
else
{
cell.BackColor = GridView1.RowStyle.BackColor;
}
cell.CssClass = "textmode";
}
}

GridView1.RenderControl(hw);

style to format numbers to string
string style = @"<style> .textmode { } </style>";
Response.Write(style);
Response.Output.Write(sw.ToString());
Response.Flush();
Response.End();
}

Etiquetas: excel, exportar, gridview, aspx
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:32.