Como exportar datos a Excel rapidamente con .Net
Quizás uno de los temas que mas dolores de cabezas nos dan al momento de desarrollar, es el tiempo que tardan algunos procesos al momento de exportar los datos. Una de las exportaciones mas lentas es sin duda la que se lleva a cavo hacia Excel desde .NET
En el siguiente ejemplo les mostrare como realizar la carga de manera rápida y efectiva.
Lo Primero que deben hacer es descargar los archivos que se encuentran a continuación (clic sobre los link).
Referencias (Dll)
DocumentFormat OpenXml (5.0 MiB)
WindowsBase (1.2 MiB)
Clase
CreateExcelFile (11.2 KiB)
Esta clase permite enviar un datatable o una lista de un objeto sin importar que tipo de objeto sea, solo debe cumplir que debe tener sus propiedades bien definidas.
ejemplo :
List clientes = new List();
using System; namespace desarrollo.quality { public class Cliente { private string nombre; private string rut; public Cliente() { } public string Nombre { get { return nombre; } set { nombre = value; } } public string Rut { get { return rut; } set { rut = value; } } } }
Luego deben agregar estos archivos a su proyecto los 2 primeros corresponden a referencias y la última es la clase que permite la exportación de datos a Excel.
Para exportar los datos solo deben llamar al método
ExportToExcel.CreateExcelFile.CreateExcelDocument(clientes, "C:\prueba.xlsx");
Pueden enviar un DataTable en lugar de una lista, y el resultado será el mismo.
Saludos
Es grandiosa la velocidad con la que realiza el procesamiento gran aporte! Lo que si me trae problemas cuando dentro de los datos hay numero decimales (con coma) por ejemplo el importe a abonar por un producto, excel toma los numeros como texto y eso hace que excel tenga que reparalo al abrir el archivo. Alguna solucion para este inconveniente? Gracias.
Hola funciona genial, pero mi consulta es si quiero agregar mas hojas con otras listas al mismo excel como seria??
Muy padre. Si es mucho pedir; me puedes apoyar con material para continuar? quiero migrar una pequeña app que envía más de 30,000 registros y se lleva una hora. La información la obtengo de una base de datos sql desde c#; es una consulta bastante compleja y de ahí envío mediante el «reader» al excel. Espero me puedas apoyar. Gracias
para que me reconozca las clases
alguna sugerencia??
Agregaste las librerías?, al principio del articulo están.
Saludos
no logro incorporarle los using
Excelente aporte amigo, gracias.
Buenas tardes amigo, ante todo gracias por tu aporte, quería consultarte lo siguiente: Al exportar algo de 600000 registros el excel me sale que está dañado. Le estoy enviando una lista con un parámetro. No se si me puedas dar una mano.
Estimado revisa el nombre que le pones al excel, cuando es muy largo suele salir dañado, otro error frecuente es no poner xlsx, en su lugar ponen xls…
Revise las dos sugerencias y el nombre es ‘Prueba.xlsx’ no se porque me genera el error, al probarlo con menos registros(30000) el excel lo genera sin ningún problema.
super las dll, la pregunta como hago para que abra de una el excel
public void AbrirExcel(string file)
{
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.FileName = «excel.exe»;
startInfo.Arguments = «\»» + file + «\»»;
Process.Start(startInfo);
}
Muy bueno, le falta un catch para IOException pero funciona super.
Hola buen aporte, podrías resubir por favor el link del DocumentFormat OpenXml, ya que no lo puedo descargar, me aparece despues de un tiempo descarga fallida. Gracias
Estimado acabo de revisar el link y funciona correctamente
Muy buen aporte, pero se me complico entenderlo un poco
El código tiene un nivel de dificultad avanzado pero lo importante en este caso es utilizarlo, básicamente reconoce listas de objetos, dataset y datatable.
Saludos
Felicidades, gracias por el aporte
Esta genial esta función se llevo mis palmas de oro, excelente aporte
gran aporte cre eso en una dll y lo uso en vb.net quisiera esa clase tambien en vb net para no realizar la dll que ahora uso gracias.
Lamento informarte que la clase no se puede convertir a vb.net, ya que hay una parte donde convierte cualquier objeto en datatable y al hacerlo en vb.net se comporta de manera inestable. Vas a tener que seguir usándolo como dll.
Saludos
Muy buenas referencias . . .