Saltar al pie de página
Iron Academy Logo
Aprender C#
Aprender C#

Otras categorías

Creando Archivos Excel en C#

Tim Corey
55m 42s

Crear y trabajar con archivos Excel es una habilidad crucial para cualquier desarrollador de C# que cree herramientas de generación de informes, exportación de datos o interfaces de entrada de usuarios. En este artículo, nos sumergimos en un recorrido detallado proporcionado por Tim Corey en su vídeo "Creación de archivos Excel en C#", en el que demuestra cómo crear un archivo Excel utilizando C#, darle formato e incluso leer datos de él, todo ello utilizando la biblioteca EPPlus.

Ya sea que esté buscando crear un nuevo libro de Excel a partir de una List, formatear celdas de una hoja de trabajo de Excel, o leer datos estructurados de vuelta en su aplicación, el ejemplo de Tim sirve como un tutorial práctico para cubrir los aspectos esenciales de la generación de archivos Excel en C#.

Veámoslo paso a paso con referencia al vídeo de Tim.

Introducción: ¿Por qué usar Excel en C#?

Tim comienza explicando que Microsoft Excel es una de las herramientas más importantes en los negocios. Los archivos Excel son fáciles de usar, muy versátiles y perfectos para representar datos. Destaca cómo la creación de archivos de Excel en C# puede utilizarse como sustituto de soluciones complejas de generación de informes, convirtiendo a Excel en su herramienta de generación de informes predeterminada.

El objetivo: crear una aplicación Excel utilizando C#, rellenarla con datos, aplicar algún formato y, a continuación, leer desde ese archivo Excel.

Configuración del proyecto en el Explorador de soluciones

Tim abre Visual Studio 2019, selecciona una aplicación de consola (.NET Core) y nombra la solución ExcelDemoApp. El uso de una app de consola proporciona un entorno limpio y libre de distracciones para centrarse puramente en el código relacionado con Excel.

Actualiza el .NET Framework de destino a .NET 5.0 para aprovechar las características de C# 9, como la instanciación simplificada de objetos.

Añadir EPPlus desde paquetes NuGet

Para crear un libro de Excel, Tim instala el paquete EPPlus a través del gestor de paquetes NuGet. EPPlus es una biblioteca de Excel que funciona con archivos .xlsx (Open XML) y admite todas las funciones de Excel, como gráficos, tablas, estilos y fórmulas, sin necesidad de MS Office o Excel Interop.

Nota: EPPlus es gratuito para uso no comercial, pero requiere una licencia para aplicaciones comerciales.

Copia la línea de aceptación de licencia no comercial requerida en su código para evitar errores de ejecución y añade lo necesario mediante OfficeOpenXml; directiva.

Definición de la ruta del archivo Excel

Usando System.IO.FileInfo, Tim establece una ruta de archivo codificada:

var file = new FileInfo(@"C:\demos\youtubedemo.xlsx");
var file = new FileInfo(@"C:\demos\youtubedemo.xlsx");

Este archivo no existe inicialmente -será creado dinámicamente por el programa.

Creación de un modelo de datos

Para rellenar la hoja de cálculo de Excel, Tim define una sencilla clase PersonModel con las siguientes propiedades:

  • int Identificación

  • cadena FirstName

  • cadena LastName

Utiliza un método de ayuda GetSetupData() para devolver una List con datos de ejemplo como Tim Corey, Sue Storm y Jane Smith.

Guardar datos en un archivo Excel de forma asíncrona

En el desarrollo moderno, bloquear el hilo de la interfaz de usuario es inaceptable. Por eso Tim define un método asíncrono:

static async Task SaveExcelFile(List<PersonModel> people, FileInfo file)
static async Task SaveExcelFile(List<PersonModel> people, FileInfo file)

Antes de escribir en Excel, comprueba si el archivo existe y elimínalo para evitar conflictos de nombres.

if (file.Exists) file.Delete();
if (file.Exists) file.Delete();

Creación y formato de la hoja de cálculo de Excel

Tim utiliza el objeto EPPlus ExcelPackage dentro de un bloque using para garantizar su correcta eliminación:

using var package = new ExcelPackage(file);
using var package = new ExcelPackage(file);

Añade una nueva hoja de trabajo al libro de trabajo:

var ws = package.Workbook.Worksheets.Add("MainReport");
var ws = package.Workbook.Worksheets.Add("MainReport");

Carga de datos

Utilizando LoadFromCollection, inserta la lista de personas a partir de la celda "A2":

ws.Cells["A2"].LoadFromCollection(people, true);
ws.Cells["A2"].LoadFromCollection(people, true);
  • true garantiza la inclusión de encabezados (como "Id", "FirstName", "LastName").

A continuación, AutoFitColumns() ajusta automáticamente el ancho de las columnas:

ws.Cells[ws.Dimension.Address].AutoFitColumns();
ws.Cells[ws.Dimension.Address].AutoFitColumns();

Por último, guarda el archivo Excel:

await package.SaveAsync();
await package.SaveAsync();

Estilización de celdas y filas de Excel

Para que el archivo Excel sea más legible, Tim muestra cómo aplicar estilos:

Fila de título

ws.Cells["A1"].Value = "Our Cool Report";
ws.Cells["A1:C1"].Merge = true; ws.Row(1).Style.Font.Size = 24;
ws.Row(1).Style.Font.Color.SetColor(Color.Blue);
ws.Column(1).Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
ws.Cells["A1"].Value = "Our Cool Report";
ws.Cells["A1:C1"].Merge = true; ws.Row(1).Style.Font.Size = 24;
ws.Row(1).Style.Font.Color.SetColor(Color.Blue);
ws.Column(1).Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;

Fila de encabezado

ws.Row(2).Style.Font.Bold = true;
ws.Row(2).Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
ws.Row(2).Style.Font.Bold = true;
ws.Row(2).Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;

Ancho de columna personalizado

ws.Column(3).Width = 20;
ws.Column(3).Width = 20;

Esta sección muestra formatos avanzados como:

  • Celdas fusionadas

  • Estilo de fuente

  • Colores de fondo

  • Alineación de filas y columnas

  • Ajustes de anchura

Estas imitan las funciones de formato típicas de MS Office Excel.

Lectura de datos de un archivo Excel en C

Ahora que hemos escrito datos en Excel, es hora de leerlos de nuevo en C#.

Tim presenta el método:

static async Task<List<PersonModel>> LoadExcelFile(FileInfo file)
static async Task<List<PersonModel>> LoadExcelFile(FileInfo file)

Establece contadores de filas y columnas:

int row = 3; // Skip title and header rows int col = 1;
int row = 3; // Skip title and header rows int col = 1;

Bucle de filas

Utilizando un bucle while, comprueba si hay celdas no vacías y lee los valores:

while (!string.IsNullOrWhiteSpace(ws.Cells[row, col].Value?.ToString()))
while (!string.IsNullOrWhiteSpace(ws.Cells[row, col].Value?.ToString()))

Dentro del bucle, los valores se leen y se analizan:

p.Id = int.Parse(ws.Cells[row, col].Value.ToString());
p.FirstName = ws.Cells[row, col + 1].Value.ToString();
p.LastName = ws.Cells[row, col + 2].Value.ToString();
p.Id = int.Parse(ws.Cells[row, col].Value.ToString());
p.FirstName = ws.Cells[row, col + 1].Value.ToString();
p.LastName = ws.Cells[row, col + 2].Value.ToString();

La lista List se rellena y se devuelve.

Verificación de datos importados

Tim recorre la lista devuelta y escribe cada entrada en la consola:

foreach (var p in peopleFromExcel)
{
     Console.WriteLine($"{p.Id} {p.FirstName} {p.LastName}");
}
foreach (var p in peopleFromExcel)
{
     Console.WriteLine($"{p.Id} {p.FirstName} {p.LastName}");
}

Para demostrar la flexibilidad de Excel como herramienta de entrada de datos, Tim añade manualmente nuevos registros ("Bill Smith", "Mary White") directamente en el archivo de Excel. Al volver a ejecutar la aplicación, estas entradas se importan sin cambiar el código, lo que demuestra el potencial de Excel como interfaz de entrada de datos.

Casos prácticos

Tim destaca los casos de uso de la solución C# Excel:

  • Exportación de tablas de bases de datos a Excel

  • Importación de datos introducidos por usuarios finales

  • Uso de Excel como panel de informes

  • Creación de libros de trabajo estructurados para el tratamiento de datos

Y todo ello sin depender de Microsoft.Office.Interop.Excel, que requiere la instalación de Excel.

Notas finales sobre EPPlus y archivos Excel

Tim explica que los archivos .xlsx creados mediante programación no contienen todos los metadatos hasta que se abren y se guardan en Excel. Por ello, el tamaño del archivo aumenta tras abrirlo en la aplicación Excel real.

También señala que EPPlus es una biblioteca pulida y robusta con soporte para:

  • Gráficos

  • Imágenes

  • Minigráficos

  • Fórmulas

  • Configuración de la página

  • Fronteras

  • Formato de celdas

Conclusión

Crear archivos Excel en C# no tiene por qué ser difícil ni caro. Gracias a la biblioteca EPPlus Excel, los desarrolladores pueden crear documentos Excel ricos en funciones mediante programación sin necesidad de MS Office. Como demuestra Tim Corey, con sólo unas pocas líneas de código se puede:

  • Crear un archivo Excel

  • Rellenar filas y columnas

  • Aplicar estilo

  • Volver a leer los datos

  • Utilizar Excel como interfaz de usuario

Esto lo convierte en una opción fantástica para herramientas ligeras de generación de informes, importación/exportación de datos o, simplemente, para proporcionar a sus usuarios una interfaz que ya conocen.

Así que la próxima vez que esté creando un proyecto y necesite generar o consumir datos de Excel, pruebe a implementar el código de ejemplo del vídeo de Tim Corey y lleve la potencia de Excel a sus aplicaciones .NET Framework o .NET Core.

Hero Worlddot related to Creando Archivos Excel en C#
Hero Affiliate related to Creando Archivos Excel en C#

Gana más compartiendo lo que te gusta

¿Creas contenidos para desarrolladores que trabajan con .NET, C#, Java, Python o Node.js? ¡Convierte tu experiencia en un ingreso extra!

Equipo de soporte de Iron

Estamos disponibles online las 24 horas, 5 días a la semana.
Chat
Email
Llámame