Principales respuestas
Exportar GridView a Excel

Pregunta
-
Buen dia foro!
De antemano muchas gracias por cualquier aporte que me puedan brindar.
Tengo un pequeño problema exportando un GridView a Excel desde C#:
El exporte funciona correctamente pero el problema surge cuando defino campos en VS como string y al momento de exportar se pierden sus valores. Ejm:
string a= "0001"; si se exporta este campo a Excel aparecerá como a=1.
Agradezco cualquier ayuda que puedan brindarme.
- Cambiado Karen Malagón martes, 7 de abril de 2015 20:57 Programming with Excel
Respuestas
-
Hola a todos!
Después de tanto buscar, por fin pude dar con la solución, y es relativamente sencilla. En primer lugar es necesario tener la libreria ClosedXML (using ClosedXML.Excel;) en el CodeBehind. Una vez hecho esto, el código es similar al que sigue:
protected void ExportarExcel(object sender, EventArgs e) { Datatable dt = new DataTable(); dt = CapaLogica.MetodoQueLlenaDataTable(parametro); //Para los que programamos entre Capas using (XLWorkBook wb = new XLWorkBook()) wb.AddWorksheet(dt, "NombredelExcel"); Response.Clear(); Response.Buffer = true; Response.Charset = ""; Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheet.sheet"; Response.AddHeader("content-disposition", "attachment; filename = NombredelExcel " + DateTime.Now + ".xlsx"); using (MemoryStream mymemory = new MemoryStream()) { wb.SaveAs(mymemory); mymemory.WriteTo(Response.OutputStream); Response.Flush(); Response.End(); } } }
- Marcado como respuesta jhonnavel lunes, 20 de abril de 2015 22:17
Todas las respuestas
-
si el HTML generado muestra 0001, pues ni modo, no creo que esté en su poder decirle a Excel que no lo interprete como número.
En otras palabras, lo que yo creo es que eso no tiene una solución usando el GridView para exportar. Tendría que usar algo como OpenXML donde puede usted tener más control sobre el archivo de Excel que se genera para poder resolver su problema.
Jose R. MCP
Code Samples -
Buen día Jose. Gracias por tu respuesta.
El código funciona similar a esto:
Un formulario web (similar al de registrarse en una página cualquiera), algunos DropDownList usan códigos por debajo (entre esos están algunos que tienen ceros adelante definidos como string) como algunos campos se "queman" con valores también definidos como string... todos los campos se almacenan en una base de Datos (quedan correctamente registrados respetando los ceros por definición del campo en la misma base de datos), el botón al ser pulsado recoge algunos campos de la base de datos, los pinta en un GridView y se exporta a Excel; cuando es exportado se presenta el inconveniente únicamente con dichos campos
-
Claro, le comprendo muy bien. El problema está en que la conversión se da en un lugar al que usted no tiene acceso: El código que está en Excel que interpreta el HTML y lo traduce a datos en una hoja de cálculo. Esa parte del código no la controla usted y hasta donde sé, no es posible pasar metadata de algún tipo para informarle a Excel que cierta celda de la tabla HTML debe ser "string" aún cuando a Excel le parezca numérico.
Por eso le dije en mi respuesta original que para corregir este problema usted debe abandonar totalemnte esta ruta de exportación y utilizar algo más complejo, como por ejemplo OpenXML, para generar el archivo en el servidor web y luego proveerlo como una descarga.
Jose R. MCP
Code Samples- Editado webJose miércoles, 1 de abril de 2015 15:34
- Propuesto como respuesta Karen Malagón miércoles, 1 de abril de 2015 18:25
-
string a = "'0001";
En una celda con formato general, un "número" ingresado anteponiendo el apóstrofe será tratado como texto.
- Propuesto como respuesta Karen Malagón miércoles, 1 de abril de 2015 18:25
-
Hola Karen
Lo que pasa es que el GridView se compone por una serie de campos de una Base de Datos definidos como NVARCHAR, que se encuentran con ese formato (a=0001). El problema es al Exportar el GridView a Excel que a pesar de ser definido como string elimina los ceros a la izquierda.
Es posible tener un GridView generado y a partir de allí concatenarle el caracter (') a cada celda? y generar otro con este "nuevo formato"? Lo he intentado pero al momento ha sido en vano.
Muchas gracias nuevamente!
-
Hola a todos!
Después de tanto buscar, por fin pude dar con la solución, y es relativamente sencilla. En primer lugar es necesario tener la libreria ClosedXML (using ClosedXML.Excel;) en el CodeBehind. Una vez hecho esto, el código es similar al que sigue:
protected void ExportarExcel(object sender, EventArgs e) { Datatable dt = new DataTable(); dt = CapaLogica.MetodoQueLlenaDataTable(parametro); //Para los que programamos entre Capas using (XLWorkBook wb = new XLWorkBook()) wb.AddWorksheet(dt, "NombredelExcel"); Response.Clear(); Response.Buffer = true; Response.Charset = ""; Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheet.sheet"; Response.AddHeader("content-disposition", "attachment; filename = NombredelExcel " + DateTime.Now + ".xlsx"); using (MemoryStream mymemory = new MemoryStream()) { wb.SaveAs(mymemory); mymemory.WriteTo(Response.OutputStream); Response.Flush(); Response.End(); } } }
- Marcado como respuesta jhonnavel lunes, 20 de abril de 2015 22:17