Ver Mensaje Individual
  #1 (permalink)  
Antiguo 17/02/2010, 19:15
Cristo_
 
Fecha de Ingreso: octubre-2008
Mensajes: 61
Antigüedad: 15 años, 6 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