Pasar Datagrid a Excel

5 views
Skip to first unread message

Javi

unread,
Dec 22, 2008, 3:50:08 AM12/22/08
to
Hola a todos,

Tengo que pasar un datagrid a excel. Me gustaría saber como se hace, pero
tengo dos problemas que no se si serán incoveniente:

1-en el servidor no tengo excel instalado.
2-necesito que una excel tenga mas de una hoja y poder poner nombre a esa
hoja/s

Me pueden ayudar?

Muchas gracias, saludos,

Iver

unread,
Dec 23, 2008, 12:44:00 PM12/23/08
to
Hola Javi,

Te sugiero lo siguiente:

1) Generes un formato (un archivo de excel con las hojas que requieres).
2) Utilices Microsoft.Jet.OleDb [1] para leer y escribir en tu archivo.
3) Generes un barrido de los datos de tu gridview y agregues lo necesario a
tu archivo de excel.
4) Envies el archivo modificado al cliente.

Por el momento es lo que se me ocurre para que puedas realizar lo que deseas
sin tener que instalar office en tu servidor.

Espero te sirva! Saludos.

[1] http://support.microsoft.com/default.aspx/kb/306023

--
Ivan Jaimes (Iver)
http://www.iver.com.mx

Luis Alberto Sanz

unread,
Jan 8, 2009, 5:55:43 AM1/8/09
to
Hola Javi.

Yo me encontré con el mismo problema, al tener que generar archivos Excel de
varias hojas. Lo hice generando archivos XML con formato de Excel. El
problema es que el ordenador del cliente para leer esos XML necesita tener
Office 2003 en adelante.

Si te vale esto, la forma de generarlos es muy sencillo:
- Te creas el archivo Excel que quieras como plantilla.
- Lo abres con Office y le das a guardar como Hoja de Calculo XML
- Lo abres con un editor de texto

Y ahí veras como es el formato, que es bastante intuitivo.
En ASP creas un fichero de texto, con ese formato, cambiado o poniendo los
datos que quieras, lo guardas en el servidor.
Dim sw As StreamWriter = File.CreateText(strPath & strFILE_NAME_Out)

Dim strLinea As String

strLinea = "<?xml version=""1.0""?><?mso-application
progid=""Excel.Sheet""?>............

sw.WriteLine(strLinea)

.....

strLinea = "<Cell ss:StyleID=""s45""><Data ss:Type=""String"">" & strTitulo
& "</Data></Cell>"

sw.WriteLine(strLinea)

......

strLinea = "</Workbook>"

sw.WriteLine(strLinea)

sw.Close()

y lo envías al cliente de la siguiente manera:

Protected Sub Descarga(ByVal FILE_NAME_Out As String)

Dim strPath As String

strPath = Request.MapPath("..\documentos\")

Response.Clear()

Response.ContentType = "application/octet-stream"

Response.AddHeader("Content-Disposition", "attachment; filename=" +
FILE_NAME_Out)

Response.Flush()

Response.WriteFile(strPath + FILE_NAME_Out)

Response.End()

End Sub

Saludos.


"Javi" <Ja...@discussions.microsoft.com> escribió en el mensaje
news:9BAD261E-A654-4860...@microsoft.com...

Reply all
Reply to author
Forward
0 new messages