Cómo exportar datos a Excel en ASP.NET Core 3.0

Al crear aplicaciones web, a menudo necesitará importar o exportar datos desde o hacia documentos de Word o Excel. Hay varias formas de lograr esto y muchos paquetes NuGet para trabajar con Word o Excel. Este artículo analiza cómo podemos trabajar con ClosedXML en ASP.NET Core para exportar datos a Excel.

Para trabajar con los ejemplos de código proporcionados en este artículo, debe tener Visual Studio 2019 instalado en su sistema. Si aún no tiene una copia, puede descargar Visual Studio 2019 aquí.

Cree un proyecto ASP.NET Core MVC en Visual Studio

En primer lugar, creemos un proyecto ASP.NET Core en Visual Studio 2019. Suponiendo que Visual Studio 2019 esté instalado en su sistema, siga los pasos que se describen a continuación para crear un nuevo proyecto ASP.NET Core en Visual Studio.

  1. Inicie el IDE de Visual Studio.
  2. Haga clic en "Crear nuevo proyecto".
  3. En la ventana "Crear nuevo proyecto", seleccione "Aplicación web ASP.NET Core" de la lista de plantillas que se muestra.
  4. Haga clic en Siguiente.
  5. En la ventana "Configure su nuevo proyecto", especifique el nombre y la ubicación del nuevo proyecto.
  6. Opcionalmente, seleccione la casilla de verificación “Colocar solución y proyecto en el mismo directorio”.
  7. Haga clic en Crear.
  8. En la ventana "Crear una nueva aplicación web ASP.NET Core" que se muestra a continuación, seleccione .NET Core como tiempo de ejecución y ASP.NET Core 2.2 (o posterior) de la lista desplegable en la parte superior. Usaré ASP.NET Core 3.0. 
  9. Seleccione "Aplicación web (Modelo-Vista-Controlador)" como plantilla de proyecto para crear una nueva aplicación ASP.NET Core MVC. 
  10. Asegúrese de que las casillas de verificación "Habilitar compatibilidad con Docker" y "Configurar para HTTPS" no estén marcadas, ya que no usaremos esas funciones aquí.
  11. Asegúrese de que la autenticación esté configurada en "Sin autenticación", ya que tampoco usaremos autenticación.
  12. Haga clic en Crear. 

Si sigue estos pasos, debería crear un nuevo proyecto ASP.NET Core MVC en Visual Studio. Usaremos este proyecto para ilustrar la exportación de datos para Excel en las secciones siguientes.

Instalar el paquete ClosedXML NuGet 

Hay varias bibliotecas para elegir si desea exportar datos a Excel. Uno de ellos se llama ClosedXML. Puede instalar este paquete a través del administrador de paquetes NuGet dentro del IDE de Visual Studio 2019 o ejecutando el siguiente comando en la consola del administrador de paquetes NuGet:

Paquete de instalación ClosedXML

Exportar datos como un archivo CSV desde ASP.NET Core 3.0

Exportar datos como un archivo separado por comas (CSV) es simple. Puede aprovechar un paquete NuGet como CsvExport o AWright18.SimpleCSVExporter para lograr esto, o puede hacerlo manualmente. En aras de la simplicidad, generaremos un archivo CSV manualmente. Considere la siguiente clase llamada Autor.

Autor de clase pública

{

  public int Id {obtener; conjunto; }

  cadena pública FirstName {get; conjunto; }

  cadena pública LastName {get; conjunto; }

}

A continuación, puede completar datos en una lista de autores como se muestra en el fragmento de código que se proporciona a continuación.

Lista de autores = nueva lista

{

    nuevo autor {Id = 1, FirstName = "Joydip", LastName = "Kanjilal"},

    nuevo autor {Id = 2, FirstName = "Steve", LastName = "Smith"},

    nuevo autor {Id = 3, FirstName = "Anand", LastName = "Narayaswamy"}

};

El siguiente fragmento de código muestra cómo puede generar un archivo CSV en un método de acción de su controlador.

public IActionResult DownloadCommaSeperatedFile ()

{

    tratar

    {

       StringBuilder stringBuilder = nuevo StringBuilder ();

       stringBuilder.AppendLine ("Id, nombre, apellido");

       foreach (autor var en autores)

       {

           stringBuilder.AppendLine ($ "{author.Id},

           {author.FirstName}, {author.LastName} ");

       }

      archivo de retorno (Encoding.UTF8.GetBytes

      (stringBuilder.ToString ()), "texto / csv", "autores.csv");

    }

    captura

    {

       return Error ();

    }

}

Exportar datos como un archivo XLSX en ASP.NET Core 3.0

Un libro de trabajo en Excel consta de varias hojas de trabajo. Puede crear un libro de Excel con el siguiente código.

var libro de trabajo = nuevo XLWorkbook ();

Luego, puede aprovechar la interfaz IXLWorkSheet para crear y agregar hojas de trabajo al libro de trabajo como se muestra a continuación.

Hoja de trabajo IXLWorksheet = workbook.Worksheets.Add ("Autores");

hoja de cálculo.Celda (1, 1) .Value = "Id";

hoja de cálculo.Célula (1, 2) .Valor = "Nombre";

hoja de cálculo.Celda (1, 3) .Valor = "Apellido";

para (int índice = 1; índice <= autores.Cuento; índice ++)

{

   hoja de cálculo.Celda (índice + 1, 1) .Valor = autores [índice - 1] .Id;

   hoja de trabajo.Celda (índice + 1, 2) .Valor = autores [índice - 1] .PrimerNombre;

   hoja de trabajo.Celda (índice + 1, 3) .Valor = autores [índice - 1] .Último nombre;

}

Por último, puede guardar el libro de trabajo como un flujo de memoria y luego crear una instancia de FileContentResult como se muestra a continuación.

usando (var stream = new MemoryStream ())

{

     workbook.SaveAs (secuencia);

     var content = stream.ToArray ();

     return File (content, contentType, fileName);

}

Descargar un documento de Excel en ASP.NET Core 3.0

Aquí está el código fuente completo del método de acción que se puede utilizar para descargar un documento de Excel.

public IActionResult DownloadExcelDocument ()

        {

            string contentType = "application / vnd.openxmlformats-

            officedocument.spreadsheetml.sheet ";

            string fileName = "autores.xlsx";

            tratar

            {

                usando (var workbook = new XLWorkbook ())

                {

                    Hoja de trabajo IXLWorksheet =

                    workbook.Worksheets.Add ("Autores");

                    hoja de cálculo.Celda (1, 1) .Value = "Id";

                    hoja de cálculo.Célula (1, 2) .Valor = "Nombre";

                    hoja de cálculo.Celda (1, 3) .Valor = "Apellido";

                    para (int índice = 1; índice <= autores.Cuento; índice ++)

                    {

                        hoja de cálculo Celda (índice + 1, 1) .Valor =

                        autores [índice - 1] .Id;

                        hoja de cálculo Celda (índice + 1, 2) .Valor =

                        autores [índice - 1] .FirstName;

                        hoja de cálculo Celda (índice + 1, 3) Valor =

                        autores [índice - 1] .LastName;

                    }

                    usando (var stream = new MemoryStream ())

                    {

                        workbook.SaveAs (secuencia);

                        var content = stream.ToArray ();

                        return File (content, contentType, fileName);

                    }

                }

            }

            catch (Excepción ex)

            {

                return Error ();

            }

        }

Si bien hemos utilizado ClosedXML en este artículo, existen varios otros paquetes para leer, escribir y manipular datos de Excel en ASP.NET Core, incluidos EPPlus y NPOI. Puede obtener más información sobre ClosedXML en GitHub en //github.com/ClosedXML/ClosedXML. Analizaré la importación de datos de Excel en una aplicación ASP.NET Core en una publicación futura aquí.

Cómo hacer más en ASP.NET y ASP.NET Core:

  • Cómo usar el almacenamiento en caché en memoria en ASP.NET Core
  • Cómo manejar errores en ASP.NET Web API
  • Cómo pasar varios parámetros a los métodos del controlador de API web
  • Cómo registrar metadatos de solicitud y respuesta en ASP.NET Web API
  • Cómo trabajar con HttpModules en ASP.NET
  • Control de versiones avanzado en ASP.NET Core Web API
  • Cómo usar la inyección de dependencia en ASP.NET Core
  • Cómo trabajar con sesiones en ASP.NET
  • Cómo trabajar con HTTPHandlers en ASP.NET
  • Cómo usar IHostedService en ASP.NET Core
  • Cómo consumir un servicio WCF SOAP en ASP.NET Core
  • Cómo mejorar el rendimiento de las aplicaciones ASP.NET Core
  • Cómo consumir una API web ASP.NET Core con RestSharp
  • Cómo trabajar con el registro en ASP.NET Core
  • Cómo usar MediatR en ASP.NET Core
  • Cómo trabajar con el estado de la sesión en ASP.NET Core
  • Cómo usar Nancy en ASP.NET Core
  • Comprender el enlace de parámetros en ASP.NET Web API
  • Cómo cargar archivos en ASP.NET Core MVC
  • Cómo implementar el manejo de excepciones globales en ASP.NET Core Web API
  • Cómo implementar comprobaciones de estado en ASP.NET Core
  • Mejores prácticas de almacenamiento en caché en ASP.NET
  • Cómo utilizar la mensajería de Apache Kafka en .NET
  • Cómo habilitar CORS en su API web
  • Cuándo usar WebClient frente a HttpClient frente a HttpWebRequest
  • Cómo trabajar con Redis Cache en .NET
  • Cuándo usar Task.WaitAll frente a Task.WhenAll en .NET