Earn More by Sharing What You Love
Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!

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 desde una List, formatear las celdas de una hoja de cálculo de Excel, o leer datos estructurados de vuelta en su aplicación, el ejemplo de Tim sirve como un tutorial práctico para cubrir lo esencial de la generación de archivos Excel en C#.
Veámoslo paso a paso con referencia al vídeo de Tim.
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.
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.
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.
Usando System.IO.FileInfo, Tim establece una ruta de archivo codificada:
var file = new FileInfo(@"C:\demos\youtubedemo.xlsx");Dim file As New FileInfo("C:\demos\youtubedemo.xlsx")Este archivo no existe inicialmente -será creado dinámicamente por el programa.
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<PersonModel> con datos de ejemplo como Tim Corey, Sue Storm y Jane Smith.
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)Private Shared Async Function SaveExcelFile(people As List(Of PersonModel), file As FileInfo) As TaskAntes 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 Then file.Delete()Tim utiliza el objeto EPPlus ExcelPackage dentro de un bloque using para garantizar su correcta eliminación:
using var package = new ExcelPackage(file);Using package As New ExcelPackage(file)
End UsingAñade una nueva hoja de trabajo al libro de trabajo:
var ws = package.Workbook.Worksheets.Add("MainReport");Dim ws = package.Workbook.Worksheets.Add("MainReport")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)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()Para que el archivo Excel sea más legible, Tim muestra cómo aplicar estilos:
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.Centerws.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.Centerws.Column(3).Width = 20;ws.Column(3).Width = 20Esta 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.
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)Private Shared Async Function LoadExcelFile(file As FileInfo) As Task(Of List(Of PersonModel))Establece contadores de filas y columnas:
int row = 3; // Skip title and header rows int col = 1;Dim row As Integer = 3 ' Skip title and header rows
Dim col As Integer = 1Utilizando un bucle while, comprueba si hay celdas no vacías y lee los valores:
while (!string.IsNullOrWhiteSpace(ws.Cells[row, col].Value?.ToString()))While Not 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 = Integer.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<PersonModel> se rellena y se devuelve.
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}");
}For Each p In peopleFromExcel
Console.WriteLine($"{p.Id} {p.FirstName} {p.LastName}")
NextPara 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.
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.
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
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.
Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!
Join our newsletter, you’ll get exclusive access on article updates. We value your privacy