Leer y escribir hojas de cálculo de Excel con C#

 C Programming >> Programación C >  >> Tags >> Excel
Leer y escribir hojas de cálculo de Excel con C#

Microsoft Excel es el campeón indiscutible del mundo de los negocios, impulsa todas las industrias e informa a los tomadores de decisiones en los niveles más altos de las estructuras corporativas. Como desarrollador, no se trata de si tendremos que lidiar con las hojas de cálculo de Excel, pero es cuestión de cuándo . ¡No temas! Esta publicación analizará la forma más sencilla que he encontrado para leer y escribir hojas de cálculo de Excel usando C# y el tiempo de ejecución de .NET.

ExcelMapper

Excel Mapper es un paquete .NET OSS con licencia de MIT que nos permite leer y escribir archivos de Excel utilizando “Objetos de C# simples (POCO)” . La biblioteca funciona en varias plataformas utilizando una biblioteca NPOI puramente administrada en lugar del motor de base de datos Jet que se encuentra exclusivamente en dispositivos Windows. Quienes estén familiarizados con otras bibliotecas de acceso a datos encontrarán que el uso de ExcelMapper recuerda a bibliotecas como Entity Framework Core o Dapper. Los usuarios también pueden trabajar con dinámico objetos y registros , lo que les permite utilizar la vanguardia en funciones de .NET. ExcelMapper también admite conceptos de Excel como fórmulas, formato y hojas.

Leyendo desde un archivo de Excel

Digamos que tenemos un archivo de Excel que contiene datos sobre películas. La columna de encabezado incluye valores para Id , Name y StreamingService . ExcelMapper puede crear asignaciones dinámicas basadas en nuestras columnas, por lo que solo necesitamos crear un registro que coincida con los nombres de nuestras columnas.

public record Movie(
    int Id, 
    string Name, 
    string StreamingService
);

El siguiente paso es crear una instancia de ExcelMapper y luego llamar al FetchAsync método con nuestro tipo de registro.

const string excelFile = "Movies.xlsx";
var excel = new ExcelMapper();
var movies = (await excel.FetchAsync<Movie>(excelFile)).ToList();

Ahora podemos usar nuestro movies en un foreach bucle.

foreach (var movie in movies)
{
    Console.WriteLine(movie);
}

Al ejecutar nuestra aplicación, podemos ver los resultados en la salida de nuestra consola.

Movie { Id = 2, Name = Ted, StreamingService = netflix }
Movie { Id = 5, Name = The Giver, StreamingService = netflix }
Movie { Id = 12, Name = Underworld: Awakening, StreamingService = netflix }
Movie { Id = 17, Name = The Boondock Saints, StreamingService = netflix }
Movie { Id = 24, Name = The Princess and the Frog, StreamingService = netflix }
Movie { Id = 30, Name = Let's Be Cops, StreamingService = netflix }
Movie { Id = 31, Name = We're the Millers, StreamingService = netflix }
Movie { Id = 34, Name = Saw III, StreamingService = netflix }
Movie { Id = 35, Name = The Imitation Game, StreamingService = netflix }
Movie { Id = 38, Name = Transformers: Age of Extinction, StreamingService = netflix }

Escribir en un archivo de Excel

Al igual que leer de un archivo de Excel, primero necesitaremos crear una instancia de ExcelMapper . Tomemos nuestro primer ejemplo y modifiquemos el StreamingService columna y luego escríbalo en una nueva hoja etiquetada disney+ . Como estamos usando registros de C# 9, usaremos el with palabra clave para crear instancias duplicadas.

using System;
using System.Collections.Generic;
using System.Linq;
using Ganss.Excel;

const string excelFile = "Movies.xlsx";
var excel = new ExcelMapper();
var movies = (await excel.FetchAsync<Movie>(excelFile)).ToList();
var purchasedByDisney = new List<Movie>();
const string disney = "disney+";
foreach (var movie in movies)
{
    Console.WriteLine(movie);
    purchasedByDisney.Add(movie with
    {
        StreamingService = disney
    });
}

await excel.SaveAsync(
    excelFile,
    purchasedByDisney,
    sheetName: disney
);

public record Movie(
    int Id,
    string Name,
    string StreamingService
);

Después de ejecutar nuestro programa, podemos ver que tenemos una nueva hoja con la etiqueta disney+ en nuestro visor de hojas de cálculo favorito.

¡Guau, no hay nada más fácil que eso!

Conclusión

Excel Mapper permite a los desarrolladores de .NET centrarse en los datos y, al mismo tiempo, darles acceso a las características que hacen de Excel una excelente herramienta multiusos. Lea datos existentes en POCO, manipule filas y escríbalos de la forma que desee. En unas pocas líneas de C# 9, podemos hacer todo lo que queramos con el mínimo esfuerzo. Eso hará que la gente de negocios en nuestras vidas sea mucho más feliz.

Gracias por leer, y por favor deje un comentario a continuación. Además, sígame en Twitter en @buhakmeh para obtener las últimas noticias y tutoriales de .NET.


No