C# Solución interoperativa de Excel

Muchos proyectos utilizan Excel para comunicarse con claridad, pero si está utilizando Microsoft.Office.Interop.Excel entonces es probable que haya tenido que enfrentarse a muchas líneas de código complicadas. En este tutorial, usaremos IronXL como una solución de C# Excel Interop, para que no tenga que usar Interop para terminar su proyecto. Puede utilizar datos de archivos Excel, crear archivos Excel, editarlos y manipularlos, todo ello mediante programación en C#.


Cómo utilizar Excel Interop de forma alternativa

  1. Instale una biblioteca Excel para procesar archivos Excel.
  2. Abra el Libro de trabajo y añada el archivo Excel actual.
  3. Establezca la Hoja de Trabajo por defecto.
  4. Lee el valor del Libro de Excel.
  5. Procesar y mostrar el valor.

    Primer paso

1. Descargar la biblioteca IronXL

Descargar la biblioteca IronXL o instalar con NuGet para acceder a la biblioteca gratuita y, a continuación, siga paso a paso este tutorial sobre el uso de Excel sin Interop. Licencias disponibles si desea ir en vivo con su proyecto.

Install-Package IronXL.Excel

Tutorial

2. Acceder a datos de archivos Excel

Para desarrollar aplicaciones empresariales, necesitamos un acceso fácil y perfecto a los datos de los archivos de Excel y la capacidad de manipularlos mediante programación en función de diversos requisitos. Con IronXL, utilice el comando WorkBook.Load(), que permite acceder a la lectura de un archivo Excel específico.

Después de acceder al Libro de trabajo, puede elegir una Hoja de trabajo específica utilizando WorkBook.GetWorkSheet() función. Ahora tiene todos los datos del archivo Excel disponibles. Vea en el siguiente ejemplo cómo utilizamos estas funciones para obtener datos de archivos Excel en un proyecto C#.

/**
Access File Data
anchor-access-excel-file-data
**/
using IronXL;
static void Main(string [] args)
{
    //Acceder a un archivo Excel
    WorkBook wb = WorkBook.Load("sample.xlsx");
    //Acceder a la hoja de trabajo de un archivo Excel
    WorkSheet ws = wb.GetWorkSheet("Sheet1");
    //obtener el valor de una celda específica
    string a = ws ["A5"].Value.ToString();
    Console.WriteLine(" Getting Single Value:\n\n   Value of Cell A5: {0} ",a);
    Console.WriteLine("\n Getting Many Cells Value using Loop:\n");
    //obtener muchos valores de celda utilizando la función rango
    foreach (var cell in ws ["B2:B10"])
    {
        Console.WriteLine("   Value is: {0}", cell.Text);
    }
    Console.ReadKey();
}
/**
Access File Data
anchor-access-excel-file-data
**/
using IronXL;
static void Main(string [] args)
{
    //Acceder a un archivo Excel
    WorkBook wb = WorkBook.Load("sample.xlsx");
    //Acceder a la hoja de trabajo de un archivo Excel
    WorkSheet ws = wb.GetWorkSheet("Sheet1");
    //obtener el valor de una celda específica
    string a = ws ["A5"].Value.ToString();
    Console.WriteLine(" Getting Single Value:\n\n   Value of Cell A5: {0} ",a);
    Console.WriteLine("\n Getting Many Cells Value using Loop:\n");
    //obtener muchos valores de celda utilizando la función rango
    foreach (var cell in ws ["B2:B10"])
    {
        Console.WriteLine("   Value is: {0}", cell.Text);
    }
    Console.ReadKey();
}
'''
'''Access File Data
'''anchor-access-excel-file-data
'''*
Imports Microsoft.VisualBasic
Imports IronXL
Shared Sub Main(ByVal args() As String)
	'Acceder a un archivo Excel
	Dim wb As WorkBook = WorkBook.Load("sample.xlsx")
	'Acceder a la hoja de trabajo de un archivo Excel
	Dim ws As WorkSheet = wb.GetWorkSheet("Sheet1")
	'obtener el valor de una celda específica
	Dim a As String = ws ("A5").Value.ToString()
	Console.WriteLine(" Getting Single Value:" & vbLf & vbLf & "   Value of Cell A5: {0} ",a)
	Console.WriteLine(vbLf & " Getting Many Cells Value using Loop:" & vbLf)
	'obtener muchos valores de celda utilizando la función rango
	For Each cell In ws ("B2:B10")
		Console.WriteLine("   Value is: {0}", cell.Text)
	Next cell
	Console.ReadKey()
End Sub
VB   C#

Este código producirá el siguiente resultado:

Con el archivo Excel con este aspecto:

Podemos ver que nuestro archivo Excel, sample.xlsx, tiene small business en la celda A5. Los demás valores de B2 a B10 son los mismos y se muestran en la salida.

DataSet y DataTables

También podemos trabajar con archivos Excel como un conjunto de datos, y tablas de datos, utilizando estas direcciones.

/**
DataSet and DataTables
anchor-dataset-and-datatables
**/
//Acceder al Libro de Trabajo.                    
WorkBook wb = WorkBook.Load("sample.xlsx");
//Hoja de trabajo Access.
 WorkSheet ws = wb.GetWorkSheet("Sheet1");
//Comportarse con un libro de trabajo como Dataset.
DataSet ds = wb.ToDataSet(); 
//Comportarse con el libro de trabajo como DataTable
DataTable dt = ws.ToDataTable(true);
/**
DataSet and DataTables
anchor-dataset-and-datatables
**/
//Acceder al Libro de Trabajo.                    
WorkBook wb = WorkBook.Load("sample.xlsx");
//Hoja de trabajo Access.
 WorkSheet ws = wb.GetWorkSheet("Sheet1");
//Comportarse con un libro de trabajo como Dataset.
DataSet ds = wb.ToDataSet(); 
//Comportarse con el libro de trabajo como DataTable
DataTable dt = ws.ToDataTable(true);
'''
'''DataSet and DataTables
'''anchor-dataset-and-datatables
'''*
'Acceder al Libro de Trabajo.                    
Dim wb As WorkBook = WorkBook.Load("sample.xlsx")
'Hoja de trabajo Access.
 Dim ws As WorkSheet = wb.GetWorkSheet("Sheet1")
'Comportarse con un libro de trabajo como Dataset.
Dim ds As DataSet = wb.ToDataSet()
'Comportarse con el libro de trabajo como DataTable
Dim dt As DataTable = ws.ToDataTable(True)
VB   C#

Más información sobre cómo trabajar con Excel DataSet y DataTablesque proporciona más ejemplos de código y explicaciones sobre el proceso.

Ahora, veremos otro aspecto, que se trata de crear un nuevo archivo Excel en nuestro proyecto C#.


3. Crear nuevo archivo Excel

Podemos crear fácilmente una nueva hoja de cálculo Excel e insertar datos en ella mediante programación en nuestro proyecto CSharp. Para lograr esto, IronXL proporciona el ` WorkBook.Create()que crea un nuevo archivo Excel.

Podemos crear tantas hojas de trabajo como necesitemos utilizando WorkBook.CreateWorkSheet() función.

Después, también podemos insertar datos, como se muestra en el siguiente ejemplo:

/**
Create New Excel 
anchor-create-new-excel-file
**/
using IronXL;
static void Main(string [] args)
{
    //crear un nuevo WorkBook
    WorkBook wb = WorkBook.Create();
    //Crear nueva hoja de trabajo en wb
    WorkSheet ws = wb.CreateWorkSheet("sheet1");
    //Insertar datos 
    ws ["A1"].Value = "New Value A1";
    ws ["B2"].Value = "New Value B2";
    //Guardar el archivo Excel recién creado
    wb.SaveAs("NewExcelFile.xlsx");
}
/**
Create New Excel 
anchor-create-new-excel-file
**/
using IronXL;
static void Main(string [] args)
{
    //crear un nuevo WorkBook
    WorkBook wb = WorkBook.Create();
    //Crear nueva hoja de trabajo en wb
    WorkSheet ws = wb.CreateWorkSheet("sheet1");
    //Insertar datos 
    ws ["A1"].Value = "New Value A1";
    ws ["B2"].Value = "New Value B2";
    //Guardar el archivo Excel recién creado
    wb.SaveAs("NewExcelFile.xlsx");
}
'''
'''Create New Excel 
'''anchor-create-new-excel-file
'''*
Imports IronXL
Shared Sub Main(ByVal args() As String)
	'crear un nuevo WorkBook
	Dim wb As WorkBook = WorkBook.Create()
	'Crear nueva hoja de trabajo en wb
	Dim ws As WorkSheet = wb.CreateWorkSheet("sheet1")
	'Insertar datos 
	ws ("A1").Value = "New Value A1"
	ws ("B2").Value = "New Value B2"
	'Guardar el archivo Excel recién creado
	wb.SaveAs("NewExcelFile.xlsx")
End Sub
VB   C#

El código anterior creará un nuevo archivo Excel con el nombre NuevoArchivoExcel.xlsx, e insertará nuevos datos en las direcciones de celda A1 y B1 con los valores Nuevo Valor A1 y Nuevo Valor B2 respectivamente. Con esta configuración, puedes insertar datos de la misma manera, tanto como necesites. Nota: Si está creando un nuevo archivo Excel o modificando el existente, no olvide guardar el archivo como se muestra en el ejemplo anterior. Profundice en cómo Crear nuevas hojas de cálculo Excel con C# y prueba el código en tu proyecto.


4. Modificar archivo Excel existente

Podemos modificar archivos Excel existentes e insertar en ellos datos actualizados mediante programación. En las modificaciones de archivos Excel, veremos los siguientes aspectos:

  • Actualizar el valor de la celda
  • Sustituir los valores antiguos por los nuevos
  • Eliminar la fila o columna

    Veamos cómo implementar los temas anteriores en nuestro proyecto CSharp.

Actualizar valor de celda

Es muy sencillo actualizar el valor de la celda de una hoja de cálculo Excel existente. Sólo tiene que acceder al archivo Excel en el proyecto y especificar su Hoja de trabajo, y luego actualizar sus datos como se muestra en el siguiente ejemplo:

/**
Update Cell Value
anchor-update-cell-value
**/
using IronXL;
static void Main(string [] args)
{
    WorkBook wb = WorkBook.Load("sample.xlsx");
    WorkSheet ws = wb.GetWorkSheet("Sheet1");
    //actualizar valor A3
    ws ["A3"].Value = "New Value of A3";
    wb.SaveAs("sample.xlsx");
}
/**
Update Cell Value
anchor-update-cell-value
**/
using IronXL;
static void Main(string [] args)
{
    WorkBook wb = WorkBook.Load("sample.xlsx");
    WorkSheet ws = wb.GetWorkSheet("Sheet1");
    //actualizar valor A3
    ws ["A3"].Value = "New Value of A3";
    wb.SaveAs("sample.xlsx");
}
'''
'''Update Cell Value
'''anchor-update-cell-value
'''*
Imports IronXL
Shared Sub Main(ByVal args() As String)
	Dim wb As WorkBook = WorkBook.Load("sample.xlsx")
	Dim ws As WorkSheet = wb.GetWorkSheet("Sheet1")
	'actualizar valor A3
	ws ("A3").Value = "New Value of A3"
	wb.SaveAs("sample.xlsx")
End Sub
VB   C#

El código anterior actualizará el valor de la celda A3 con Nuevo Valor de A3.

También podemos actualizar varias celdas con un valor estático, utilizando la función rango:

 ws ["A3:C3"].Value = "New Value";
 ws ["A3:C3"].Value = "New Value";
ws ("A3:C3").Value = "New Value"
VB   C#

Esto actualizará la fila número 3 de las celdas A3 a C3 con el Nuevo Valor del fichero Excel.

Más información sobre el uso del Función Range en C# con estos ejemplos.

Sustituir valores de celda

Es la belleza de IronXL que podemos reemplazar fácilmente los viejos valores con nuevos valores en un archivo Excel existente y cubre todos los siguientes aspectos:

  • Reemplazar valores de una Hoja de Trabajo completa:
 WorkSheet.Replace("old value", "new value");
 WorkSheet.Replace("old value", "new value");
WorkSheet.Replace("old value", "new value")
VB   C#
  • Sustituye los valores de una fila concreta:
WorkSheet.Rows [RowIndex].Replace("old value", "new value");
WorkSheet.Rows [RowIndex].Replace("old value", "new value");
WorkSheet.Rows (RowIndex).Replace("old value", "new value")
VB   C#
  • Reemplazar los valores de una columna específica:
WorkSheet.Columns [ColumnIndex].Replace("old value", "new Value")
WorkSheet.Columns [ColumnIndex].Replace("old value", "new Value")
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'WorkSheet.Columns [ColumnIndex].Replace("old value", "new Value")
VB   C#
  • Reemplazar valores en un rango específico:
WorkSheet ["From:To"].Replace("old value", "new value");
WorkSheet ["From:To"].Replace("old value", "new value");
WorkSheet ("From:To").Replace("old value", "new value")
VB   C#

Veamos un ejemplo para ver claramente cómo utilizar las funciones anteriores en nuestro proyecto CSharp para reemplazar los valores. Para ello, utilizaremos la función reemplazar para reemplazar un valor en un rango específico.

/**
Replace Cell Value Range
anchor-replace-cell-values
**/
using IronXL;
static void Main(string [] args)
{
    WorkBook wb = WorkBook.Load("sample.xlsx");
    WorkSheet ws = wb.GetWorkSheet("Sheet1");
    //Especificación de la gama de B5 a G5
    ws ["B5:G5"].Replace("Normal", "Good");
    wb.SaveAs("sample.xlsx");
}
/**
Replace Cell Value Range
anchor-replace-cell-values
**/
using IronXL;
static void Main(string [] args)
{
    WorkBook wb = WorkBook.Load("sample.xlsx");
    WorkSheet ws = wb.GetWorkSheet("Sheet1");
    //Especificación de la gama de B5 a G5
    ws ["B5:G5"].Replace("Normal", "Good");
    wb.SaveAs("sample.xlsx");
}
'''
'''Replace Cell Value Range
'''anchor-replace-cell-values
'''*
Imports IronXL
Shared Sub Main(ByVal args() As String)
	Dim wb As WorkBook = WorkBook.Load("sample.xlsx")
	Dim ws As WorkSheet = wb.GetWorkSheet("Sheet1")
	'Especificación de la gama de B5 a G5
	ws ("B5:G5").Replace("Normal", "Good")
	wb.SaveAs("sample.xlsx")
End Sub
VB   C#

El código anterior reemplazará el valor Normal por Bueno desde B5 hasta G5, y el resto de la Hoja de Trabajo permanecerá igual. Más información Editar Valores de Celdas Excel en un Rango y utilizando esta función de IronXL.

Eliminar filas de un archivo Excel

En el desarrollo de aplicaciones, a veces necesitamos eliminar mediante programación filas enteras de archivos Excel existentes. Para esta tarea, utilizamos la función RemoveRow() función de IronXL. He aquí un ejemplo:

/**
Remove Row
anchor-remove-rows-of-excel-file
**/
using IronXL;
static void Main(string [] args)
{ 
    WorkBook wb = WorkBook.Load("sample.xlsx");
    WorkSheet ws = wb.GetWorkSheet("Sheet1");
    //Eliminar la fila número 2
    ws.Rows [2].RemoveRow();
    wb.SaveAs("sample.xlsx");
}
/**
Remove Row
anchor-remove-rows-of-excel-file
**/
using IronXL;
static void Main(string [] args)
{ 
    WorkBook wb = WorkBook.Load("sample.xlsx");
    WorkSheet ws = wb.GetWorkSheet("Sheet1");
    //Eliminar la fila número 2
    ws.Rows [2].RemoveRow();
    wb.SaveAs("sample.xlsx");
}
'''
'''Remove Row
'''anchor-remove-rows-of-excel-file
'''*
Imports IronXL
Shared Sub Main(ByVal args() As String)
	Dim wb As WorkBook = WorkBook.Load("sample.xlsx")
	Dim ws As WorkSheet = wb.GetWorkSheet("Sheet1")
	'Eliminar la fila número 2
	ws.Rows (2).RemoveRow()
	wb.SaveAs("sample.xlsx")
End Sub
VB   C#

El código anterior eliminará la fila número 2 de sample.xlsx.


Acceso rápido a tutoriales

Referencia IronXL

Lea la Referencia de la API de IronXL para obtener más información sobre todas las funciones, características, clases y espacios de nombres.

Referencia IronXL