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

También te podría gustar...

23 Respuestas

  1. Sebastian dice:

    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.

  2. Francisco dice:

    Hola funciona genial, pero mi consulta es si quiero agregar mas hojas con otras listas al mismo excel como seria??

  3. Jorge dice:

    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

  4. Jose dice:

    para que me reconozca las clases

    alguna sugerencia??

  5. Jose dice:

    no logro incorporarle los using

  6. Jose dice:

    Excelente aporte amigo, gracias.

  7. AYJ dice:

    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…

      • AYJ dice:

        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.

  8. carlos mora dice:

    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);
      }

  9. Leodev dice:

    Muy bueno, le falta un catch para IOException pero funciona super.

  10. Ricardo dice:

    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

  11. Carlos dice:

    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

  12. azepeda dice:

    Felicidades, gracias por el aporte

  13. Esta genial esta función se llevo mis palmas de oro, excelente aporte

  14. jacinto chavez a dice:

    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

  15. Cesar Ali dice:

    Muy buenas referencias . . .