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
- Crear en tiempo de ejecución una página web html
- En la página creada pasar el grid view como una tabla HTML
- Regresa esa página al usuario cambiando la extención a .xls en vez de html
- excel lo abre como si fuese un archivo de excel
Como lo pueden ver en todas estas direcciones
Código:
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).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
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:
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.exportToXL(GridView1)
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