Saltar al pie de página
USANDO IRONXL

Cómo gestionar rangos de Excel en C#

Trabajar con archivos de Excel programáticamente puede mejorar significativamente la eficiencia y las capacidades de automatización de tus aplicaciones en C#. Ya sea generando informes, procesando datos o creando hojas de cálculo complejas dinámicamente, dominar la manipulación de archivos de Excel es crucial. En este tutorial, nos centraremos en trabajar con rangos de Excel usando IronXL. Cubrirá cómo escribir, leer y manipular rangos dentro de un archivo de Excel.

Cómo leer rangos de Excel en C

  1. Instalar la biblioteca de IronXL para manejar archivos de Excel.
  2. Cargar el libro de trabajo y especificar la hoja de trabajo.
  3. Seleccionar el rango de celdas para leer.
  4. Extraer y leer datos del rango especificado.

¿Qué es IronXL?

IronXL es una biblioteca integral para C# que simplifica el trabajo con archivos de Excel, ofreciendo una variedad de características para la integración y manipulación sin interrupciones de datos de hojas de cálculo. Sus capacidades incluyen leer, escribir y modificar archivos de Excel sin requerir la instalación de Microsoft Excel, permitiendo la compatibilidad multiplataforma.

IronXL facilita la extracción de datos de celdas específicas, rangos o hojas de trabajo completas, junto con funcionalidades avanzadas como formatos, estilos y formatos condicionales. Con soporte para cálculos, fórmulas y análisis estadísticos, IronXL capacita a los desarrolladores para manejar eficientemente las operaciones de Excel programáticamente, haciéndolo una herramienta indispensable para automatizar tareas centradas en datos dentro de aplicaciones C#.

Introducción a Excel: Rango de celdas en C

En primer lugar, necesitamos instalar la Biblioteca IronXL en nuestra Aplicación.

Instalar el paquete NuGet IronXL

Puedes instalar IronXL a través del Administrador de Paquetes NuGet con el siguiente comando:

Install-Package IronXL.Excel

El comando anterior instalará IronXL con todas sus dependencias.

Cómo Administrar Rangos de Excel en C#: Figura 1

Agregar espacio de nombres

Agrega el siguiente namespace en la parte superior de la clase Program.cs, o donde quieras usar los métodos de IronXL.

using IronXL;
using IronXL;
Imports IronXL
$vbLabelText   $csharpLabel

Cargar libro de Excel

El primer paso es cargar el libro de trabajo de Excel. El siguiente código cargará el libro de trabajo de Excel en nuestra aplicación.

static void Main(string[] args)
{
    // Load an existing Excel workbook
    var workbook = WorkBook.Load("test_excel.xlsx");

    // Retrieve the specified worksheet from the workbook
    var sheet = workbook.GetWorkSheet("Sheet1");
}
static void Main(string[] args)
{
    // Load an existing Excel workbook
    var workbook = WorkBook.Load("test_excel.xlsx");

    // Retrieve the specified worksheet from the workbook
    var sheet = workbook.GetWorkSheet("Sheet1");
}
Shared Sub Main(ByVal args() As String)
	' Load an existing Excel workbook
	Dim workbook = WorkBook.Load("test_excel.xlsx")

	' Retrieve the specified worksheet from the workbook
	Dim sheet = workbook.GetWorkSheet("Sheet1")
End Sub
$vbLabelText   $csharpLabel

La primera línea carga un libro de trabajo de Excel existente del archivo llamado "test_excel.xlsx". La segunda línea recupera la hoja de trabajo llamada "Sheet1" del libro de trabajo cargado.

Estaré usando el siguiente archivo de Excel a lo largo de este tutorial.

Cómo Administrar Rangos de Excel en C#: Figura 2

Lectura de datos de un rango

Ahora, leamos datos de rangos de celdas especificados.

// Define a range from cell A2 to G10 in the worksheet
var range = sheet["A2:G10"];

// Iterate over each cell in the range and output its value
foreach (var item in range)
{
    Console.WriteLine(item);
}
// Define a range from cell A2 to G10 in the worksheet
var range = sheet["A2:G10"];

// Iterate over each cell in the range and output its value
foreach (var item in range)
{
    Console.WriteLine(item);
}
' Define a range from cell A2 to G10 in the worksheet
Dim range = sheet("A2:G10")

' Iterate over each cell in the range and output its value
For Each item In range
	Console.WriteLine(item)
Next item
$vbLabelText   $csharpLabel

La primera línea selecciona una dirección de rango específico (A2 a G10) en la hoja de trabajo, permitiéndote trabajar con múltiples celdas de Excel simultáneamente. El bucle foreach (var item in range) itera sobre cada celda dentro de este rango de celdas, permitiendo un proceso de datos eficiente.

Usando Console.WriteLine(item);, el código imprime el valor de cada celda en la consola, facilitando la revisión del contenido del rango. Este enfoque simplifica la manipulación de datos y mejora la legibilidad del código.

Usar fórmulas de Excel en el rango

Seleccionemos un rango específico e implementemos algunas fórmulas de Excel.

// Define a range from cell F2 to F42 for statistical analysis
var range = sheet["F2:F42"];

// Output the minimum age within the range
Console.WriteLine($"Minimum Age: {range.Min()}");

// Output the maximum age within the range
Console.WriteLine($"Maximum Age: {range.Max()}");

// Output the average age, casting the average value to an integer
Console.WriteLine($"Average Age: {(int)range.Avg()}");
// Define a range from cell F2 to F42 for statistical analysis
var range = sheet["F2:F42"];

// Output the minimum age within the range
Console.WriteLine($"Minimum Age: {range.Min()}");

// Output the maximum age within the range
Console.WriteLine($"Maximum Age: {range.Max()}");

// Output the average age, casting the average value to an integer
Console.WriteLine($"Average Age: {(int)range.Avg()}");
Imports System

' Define a range from cell F2 to F42 for statistical analysis
Dim range = sheet("F2:F42")

' Output the minimum age within the range
Console.WriteLine($"Minimum Age: {range.Min()}")

' Output the maximum age within the range
Console.WriteLine($"Maximum Age: {range.Max()}")

' Output the average age, casting the average value to an integer
Console.WriteLine($"Average Age: {CInt(Math.Truncate(range.Avg()))}")
$vbLabelText   $csharpLabel

El código var range = sheet["F2:F42"]; selecciona un rango de celdas que va desde F2 hasta F42, facilitando el análisis estadístico de datos de edad. Usando range.Min() y range.Max(), calcula eficientemente los valores de edad mínimo y máximo dentro del rango especificado, ayudando en las perspectivas demográficas.

Además, range.Avg() calcula el promedio de edad, ofreciendo métricas estadísticas valiosas para la interpretación de datos. Este enfoque simplifica las tareas de análisis de datos, proporcionando acceso rápido a información estadística esencial para la toma informada de decisiones.

Cómo Administrar Rangos de Excel en C#: Figura 3

Lectura de datos de una sola célula

Leamos datos de una única celda.

// Retrieve the value from cell B2 in the worksheet
var read_from_single_cell = sheet["B2"];

// Output the value in cell B2
Console.WriteLine($"The Value in Cell B2 is: {read_from_single_cell}");
// Retrieve the value from cell B2 in the worksheet
var read_from_single_cell = sheet["B2"];

// Output the value in cell B2
Console.WriteLine($"The Value in Cell B2 is: {read_from_single_cell}");
' Retrieve the value from cell B2 in the worksheet
Dim read_from_single_cell = sheet("B2")

' Output the value in cell B2
Console.WriteLine($"The Value in Cell B2 is: {read_from_single_cell}")
$vbLabelText   $csharpLabel

El código var read_from_single_cell = sheet["B2"]; recupera el valor almacenado en la celda B2 de la hoja de trabajo. Usando este enfoque, puedes acceder fácilmente a valores de celdas específicas dentro del archivo de Excel.

Con Console.WriteLine($"El Valor en la Celda B2 es: {read_from_single_cell}");, el código imprime el valor recuperado de las celdas de referencia en la consola, facilitando la verificación y depuración de los datos. Esto simplifica el proceso de recuperar y mostrar valores individuales de celdas de archivos de Excel.

Cómo Administrar Rangos de Excel en C#: Figura 4

Lectura de datos de toda la columna

Leamos Datos de una columna completa usando el Índice.

// Retrieve values from the column at index 2 (C column) 
var columnValues = sheet.GetColumn(2); // 2 is column index

// Iterate over each value in the column and output it
foreach (var columnValue in columnValues)
{
    Console.WriteLine(columnValue);
}
// Retrieve values from the column at index 2 (C column) 
var columnValues = sheet.GetColumn(2); // 2 is column index

// Iterate over each value in the column and output it
foreach (var columnValue in columnValues)
{
    Console.WriteLine(columnValue);
}
' Retrieve values from the column at index 2 (C column) 
Dim columnValues = sheet.GetColumn(2) ' 2 is column index

' Iterate over each value in the column and output it
For Each columnValue In columnValues
	Console.WriteLine(columnValue)
Next columnValue
$vbLabelText   $csharpLabel

El código var columnValues = sheet.GetColumn(2); recupera todos los valores de la columna ubicada en el índice 2 (columna C) en la hoja de trabajo. Esto te permite acceder eficientemente a todos los valores dentro de una columna específica de la hoja de Excel.

A través del bucle foreach iterando sobre columnValues, cada valor en la columna es impreso en la consola usando Console.WriteLine(columnValue);. Este enfoque facilita el procesamiento y visualización de datos columnarios de archivos de Excel, optimizando las tareas de análisis de datos.

Cómo Administrar Rangos de Excel en C#: Figura 5

Alternativamente, también podemos leer datos de una columna usando un Nombre de Columna en lugar de un índice. Considera el siguiente ejemplo:

// Retrieve values from the column with name "C"
var columnValues = sheet.GetColumn("C");
// Retrieve values from the column with name "C"
var columnValues = sheet.GetColumn("C");
' Retrieve values from the column with name "C"
Dim columnValues = sheet.GetColumn("C")
$vbLabelText   $csharpLabel

De esta manera, podemos especificar varias columnas.

Lectura de datos de toda la fila

Leamos datos de toda una fila usando números de fila.

// Retrieve values from the row at index 1 (Row 2)
var rowValues = sheet.GetRow(1); // 1 is row index

// Iterate over each value in the row and output it
foreach (var rowValue in rowValues)
{
    Console.Write(rowValue + "  ");
}
// Retrieve values from the row at index 1 (Row 2)
var rowValues = sheet.GetRow(1); // 1 is row index

// Iterate over each value in the row and output it
foreach (var rowValue in rowValues)
{
    Console.Write(rowValue + "  ");
}
' Retrieve values from the row at index 1 (Row 2)
Dim rowValues = sheet.GetRow(1) ' 1 is row index

' Iterate over each value in the row and output it
For Each rowValue In rowValues
	Console.Write(rowValue & "  ")
Next rowValue
$vbLabelText   $csharpLabel

El código var rowValues = sheet.GetRow(1); recupera todos los valores de una única fila ubicada en el índice 1 (Fila 2) en la hoja de trabajo, permitiendo un acceso eficiente a datos específicos de la fila. A través del bucle foreach iterando sobre rowValues, cada valor en la fila es impreso en la consola usando Console.Write(rowValue + " ");.

Este enfoque simplifica la extracción y visualización de datos de fila de archivos de Excel, ayudando en tareas de análisis y generación de informes de datos. De esta manera, podemos leer valores de múltiples celdas sin especificar un rango.

Cómo Administrar Rangos de Excel en C#: Figura 6

Escribir datos en una celda o un rango

Podemos escribir datos tanto a celdas como a rangos. Primero, escribiremos datos a un rango.

// Select a range from D2 to D14 for modification
var range = sheet["D2:D14"];

// Set the value for each cell in the range
range.Value = "Prefer Not to Say"; // Change Gender Value

// Save the modified workbook to persist changes
workbook.Save();
// Select a range from D2 to D14 for modification
var range = sheet["D2:D14"];

// Set the value for each cell in the range
range.Value = "Prefer Not to Say"; // Change Gender Value

// Save the modified workbook to persist changes
workbook.Save();
' Select a range from D2 to D14 for modification
Dim range = sheet("D2:D14")

' Set the value for each cell in the range
range.Value = "Prefer Not to Say" ' Change Gender Value

' Save the modified workbook to persist changes
workbook.Save()
$vbLabelText   $csharpLabel

El código var range = sheet["D2:D14"]; selecciona un rango que va desde la celda D2 hasta D14, permitiendo la modificación de datos en bloque. Al establecer range.Value en "Prefiero no decirlo", actualiza eficientemente el valor de género para cada celda dentro del rango especificado, minimizando tareas repetitivas.

El comando subsecuente workbook.Save(); asegura el almacenamiento persistente de estos cambios, manteniendo la consistencia e integridad de los datos. Este enfoque simplifica las actualizaciones en lote y asegura uniformidad a través de múltiples celdas, mejorando la eficiencia en la gestión de datos.

Ahora, escribamos datos a una celda específica.

// Set the value for cell B2
sheet["B2"].Value = "John";

// Save the workbook to persist the changes
workbook.Save();
// Set the value for cell B2
sheet["B2"].Value = "John";

// Save the workbook to persist the changes
workbook.Save();
' Set the value for cell B2
sheet("B2").Value = "John"

' Save the workbook to persist the changes
workbook.Save()
$vbLabelText   $csharpLabel

El código sheet["B2"].Value = "John"; asigna directamente el valor "John" a la celda B2 en la hoja de trabajo de Excel, ofreciendo un método conciso y directo para actualizar valores de celdas específicas. Este enfoque agiliza el proceso de modificar contenidos individuales de celdas, mejorando la legibilidad y eficiencia del código.

Cómo Administrar Rangos de Excel en C#: Figura 7 - Rango de Excel en C#

Conclusión

En conclusión, dominar las operaciones de rango de Excel en C# usando IronXL mejora significativamente la eficiencia y capacidades de automatización de aplicaciones, facilitando tareas como el procesamiento de datos, generación de informes y creación dinámica de hojas de cálculo.

Con las poderosas características de IronXL para leer, escribir y manipular archivos de Excel, los desarrolladores pueden optimizar los procesos de manejo de datos y aprovechar funcionalidades avanzadas como fórmulas, formatos y análisis estadísticos. Además, IronXL ofrece una prueba gratuita, asegurando flexibilidad y escalabilidad para varios requisitos de proyecto.

Preguntas Frecuentes

¿Cómo puedo empezar a manipular rangos de Excel en C#?

Para comenzar a manipular rangos de Excel en C#, instala la biblioteca IronXL a través del Administrador de Paquetes NuGet usando el comando: Install-Package IronXL.Excel. Luego, puedes comenzar a cargar libros de trabajo de Excel y trabajar con rangos utilizando la completa API de IronXL.

¿Cómo cargo un libro de trabajo de Excel usando IronXL?

Puedes cargar un libro de trabajo de Excel en IronXL con el método WorkBook.Load, pasando el nombre del archivo como argumento, por ejemplo: var workbook = WorkBook.Load('test_excel.xlsx');.

¿Qué métodos están disponibles para leer un rango específico de celdas en IronXL?

En IronXL, puedes leer un rango específico de celdas definiendo el rango utilizando sintaxis como sheet['A2:G10'] e iterando sobre él para acceder al valor de cada celda.

¿Cómo puedo realizar un análisis estadístico de datos dentro de un rango de Excel?

Usando IronXL, puedes realizar un análisis estadístico seleccionando un rango y aplicando métodos como range.Min(), range.Max(), y range.Avg() para calcular valores mínimos, máximos y promedio, respectivamente.

¿Cuál es el proceso para escribir datos en una celda específica usando IronXL?

Para escribir datos en una celda específica en IronXL, asigna un valor directamente a la celda, por ejemplo: sheet['B2'].Value = 'John';, y luego guarda el libro de trabajo para mantener los cambios.

¿Puedo leer una columna completa de datos sin especificar un rango en IronXL?

Sí, IronXL te permite leer una columna completa usando sheet.GetColumn(index) o sheet.GetColumn('C'), lo que te permite recuperar datos usando un índice o un nombre de columna.

¿Cómo extraigo datos de una fila completa usando IronXL?

Para extraer datos de una fila completa en IronXL, usa sheet.GetRow(index) y itera sobre los valores recuperados para acceder a los datos.

¿Qué funciones avanzadas ofrece IronXL para la manipulación de Excel?

IronXL proporciona funciones avanzadas como formato, estilización, formato condicional y soporte para cálculos y fórmulas, mejorando las capacidades de manipulación de archivos Excel dentro de aplicaciones C#.

¿Es posible probar IronXL antes de comprarlo?

Sí, IronXL ofrece una prueba gratuita, que permite a los desarrolladores explorar sus funcionalidades y determinar su idoneidad para sus proyectos sin ningún costo inicial.

¿Cómo puede IronXL mejorar la automatización en las aplicaciones C#?

IronXL mejora la automatización en las aplicaciones C# al permitir una manipulación fluida de archivos de Excel de manera programática, lo que es esencial para tareas como el procesamiento de datos, la generación de informes y la creación dinámica de hojas de cálculo, todo sin requerir la instalación de Microsoft Excel.

Jordi Bardia
Ingeniero de Software
Jordi es más competente en Python, C# y C++. Cuando no está aprovechando sus habilidades en Iron Software, está programando juegos. Compartiendo responsabilidades para pruebas de productos, desarrollo de productos e investigación, Jordi agrega un valor inmenso a la mejora continua del producto. La experiencia variada lo mantiene ...
Leer más