Aviso para navegantes: este es un artículo únicamente dirigido a aquellos que programen en .NET y necesiten solucionar este problema. El resto, podeis pasar, porque seguramente os parecerá aburrido ;)

Software necesario:

    Microsoft Visual Studio .NET
    Microsoft IIS
    Microsoft Excel
    Microsoft SQL Server 2000

Introducción

El otro día, en el trabajo conseguí cómo hacer algo que en principio debería ser trivial, pero a muchos de los que programamos en .NET no nos lo parece en absoluto. O al menos, en la cantidad de foros que visité para saber cómo hacerlo, encontré infinidad de preguntas sin respuesta referentes al mismo tema.
Vereis, llevaba tiempo queriendo generar un informe en formato Excel utilizando una plantilla. Tengo una aplicación web desarrollada en ASP.NET que se dedica a interactuar con una base de datos en SQL Server 2000. En esta aplicación hay un DataGrid con una serie de datos que, al exportarlos a Excel, sirven para consultar una serie de estadísticas y gráficos que se generan mediante unas fórmulas de la plantilla.

Una vez puestos en situación, existen varias soluciones a este problema, de las cuales me quedo con dos:

Solución 1: Renderizar el DataGrid en un fichero de salida y renombrarlo a *.xls

Esta es la solución más chapucera, pero también la más sencilla y rápida. Y para según qué casos, sobre todo si no necesitáis usar una plantilla Excel, sólo exportar a este formato os puede resolver el problema enseguida.
Se trata de renderizar el DataGrid a html, y escribir mediante HTTP en un fichero, que guardaremos con extensión .xls. Es posible cambiar el formato del fichero de salida gracias al código HTML, pero poco más. El código es el siguiente:

Descargar Solución 1

Como veis, sólo se trata de escribir en un flujo de salida dirigido a un fichero, como si escribiéramos por http. Se puede utilizar código HTML, ya que el Excel lo entenderá. De esta forma se puede dar formato a un encabezado (por ejemplo) mediante las etiquetas HTML convencionales.

Fuente: El Rincón del Programador

Solución 2: Utilizando funciones de librerías .NET

La solución que utilicé yo, ya que con la anterior no se puede exportar a una plantilla. Sólo se puede crear un archivo vacío y sin formato (que le puede ser útil a mucha gente, no obstante). Lo detallaré paso a paso:

    1. Instalar Excel en el servidor, y seguir los pasos de este tutorial para hacer que se puedan ejecutar procesos Excel en la máquina, y que se cierren correctamente.
    2. Una vez hecho esto, en nuestro proyecto .NET, agregar las siguientes librerías, en el menú de agregar Referencias, pestaña COM:

  • a. Microsoft Office Object Library (la versión que tengais instalada)
  • b. Microsoft Escel Object Library (la misma versión que la anterior)
  • Hay que agregarlas en este orden, porque si no la segunda os dará error.

    3. En el archivo web.config de vuestra aplicación ASP.NET, añadir la siguiente línea:

    <identity impersonate="true"/>

    4. En vuestra clase, importar éste namespace:

    Imports System.Runtime.InteropServices.Marshal

    5. Por último, el código que abre la aplicación Excel, coge la plantilla, y genera un archivo nuevo utilizando los datos del DataGrid y de la plantilla es el siguiente:

Descargar Solución 2

Está bastante comentado, por lo que no creo que os dé problemas. Si es así, dejadme un comentario e intentaré resolverlo. Suerte! ;)

Fuente: El Guille