Saltar al pie de página
USANDO IRONXL

Cómo importar un archivo de Excel a DataTable con IronXL

Importar un archivo de Excel a DataTable con IronXL

No es ningún secreto que analizar manualmente archivos de Excel rara vez es lo más destacado del día de un desarrollador. Todos hemos estado allí, luchando con cadenas de conexión OLEDB heredadas o intentando mapear datos de hojas de cálculo no estructuradas en algo que nuestra aplicación .NET realmente entienda.

La DataTable en C# es el gran ecualizador. Actúa como el puente perfecto, convirtiendo esas filas y columnas en una estructura familiar lista para consultas LINQ, enlace DataGrid o un viaje rápido a una base de datos SQL.

IronXL elimina el trabajo pesado de este proceso. En lugar de configuraciones complejas, utiliza un único método ToDataTable intuitivo para gestionar la conversión. Ya sea que esté creando una herramienta de informes o un script de migración de datos, aquí le mostramos cómo puede importar datos de Excel sin esfuerzo.

¿Quieres seguirnos? Utilice la prueba gratuita de IronXL para probar usted mismo esta poderosa biblioteca.

¿Cómo se puede importar un archivo de Excel a una DataTable en C#?

Para importar un archivo Excel a DataTable con C#, cargue el libro utilizando WorkBook.Load, acceda a la hoja de cálculo de destino y llame al método ToDataTable. Este enfoque funciona con archivos XLSX, XLS, XLSM y formatos CSV. Asegúrese de hacer referencia a los siguientes espacios de nombres para acceder a las clases necesarias.

Instale IronXL a través del Administrador de paquetes NuGet con el siguiente comando en Visual Studio usando el Administrador de paquetes NuGet:

Install-Package IronXL.Excel

Luego, usa este fragmento de código conciso para mover tus datos:

using IronXL;
using System;
using System.Data;
class Program
{
    static void Main(string[] args)
    {
        // Load the Excel file from the specified path
        string filePath = "sales-data.xlsx";
        WorkBook workbook = WorkBook.Load(filePath);
        // Access the first worksheet in the workbook
        WorkSheet worksheet = workbook.DefaultWorkSheet;
        // Convert worksheet to DataTable with first row as column headers
        DataTable dt = worksheet.ToDataTable(true);
        // Display the imported data
        foreach (DataRow row in dt.Rows)
        {
            Console.WriteLine(string.Join(" | ", row.ItemArray));
        }
    }
}
using IronXL;
using System;
using System.Data;
class Program
{
    static void Main(string[] args)
    {
        // Load the Excel file from the specified path
        string filePath = "sales-data.xlsx";
        WorkBook workbook = WorkBook.Load(filePath);
        // Access the first worksheet in the workbook
        WorkSheet worksheet = workbook.DefaultWorkSheet;
        // Convert worksheet to DataTable with first row as column headers
        DataTable dt = worksheet.ToDataTable(true);
        // Display the imported data
        foreach (DataRow row in dt.Rows)
        {
            Console.WriteLine(string.Join(" | ", row.ItemArray));
        }
    }
}
Imports IronXL
Imports System
Imports System.Data

Module Program
    Sub Main(args As String())
        ' Load the Excel file from the specified path
        Dim filePath As String = "sales-data.xlsx"
        Dim workbook As WorkBook = WorkBook.Load(filePath)
        ' Access the first worksheet in the workbook
        Dim worksheet As WorkSheet = workbook.DefaultWorkSheet
        ' Convert worksheet to DataTable with first row as column headers
        Dim dt As DataTable = worksheet.ToDataTable(True)
        ' Display the imported data
        For Each row As DataRow In dt.Rows
            Console.WriteLine(String.Join(" | ", row.ItemArray))
        Next
    End Sub
End Module
$vbLabelText   $csharpLabel

Resultado

Importación de un archivo de Excel a DataTable con IronXL: Imagen 1 - Archivo de Excel importado a DataTable

El método WorkBook.Load lee el archivo de Excel desde la ubicación de la cadena filePath y crea un objeto de libro de trabajo que contiene todos los datos de la hoja de Excel. El parámetro ToDataTable(true) indica que la primera fila contiene encabezados de columna, que se utilizan automáticamente como nombres de columnas de la tabla de datos.

¿Cuál es el mejor método para leer datos de un archivo de Excel en una tabla de datos?

Para leer el contenido de un archivo de Excel de manera eficiente es necesario gestionar tanto filas de encabezado como escenarios de datos sin procesar. El método ToDataTable de IronXL acepta un parámetro booleano que determina si la primera fila se trata como nombres de columnas o como datos. Tenga en cuenta que el manejo de propiedades extendidas o la conversión de tipos de celdas complejos puede requerir una configuración adicional, pero el método predeterminado maneja la mayoría de los casos de manera sólida.

using IronXL;
using System.Data;
// Load workbook from file path
string filePath = @"C:\Data\inventory.xlsx";
WorkBook workbook = WorkBook.Load(filePath);
WorkSheet worksheet = workbook.WorkSheets[0];
// First row as headers (true) or as data (false)
DataTable dataTableWithHeaders = worksheet.ToDataTable(true);
DataTable dataTableWithoutHeaders = worksheet.ToDataTable(false);
// Process each row in the DataTable
foreach (DataRow row in dataTableWithHeaders.Rows)
{
    for (int i = 0; i < dataTableWithHeaders.Columns.Count; i++)
    {
        object value = row[i];
        Console.Write($"{value}\t");
    }
    Console.WriteLine();
}
using IronXL;
using System.Data;
// Load workbook from file path
string filePath = @"C:\Data\inventory.xlsx";
WorkBook workbook = WorkBook.Load(filePath);
WorkSheet worksheet = workbook.WorkSheets[0];
// First row as headers (true) or as data (false)
DataTable dataTableWithHeaders = worksheet.ToDataTable(true);
DataTable dataTableWithoutHeaders = worksheet.ToDataTable(false);
// Process each row in the DataTable
foreach (DataRow row in dataTableWithHeaders.Rows)
{
    for (int i = 0; i < dataTableWithHeaders.Columns.Count; i++)
    {
        object value = row[i];
        Console.Write($"{value}\t");
    }
    Console.WriteLine();
}
Imports IronXL
Imports System.Data

' Load workbook from file path
Dim filePath As String = "C:\Data\inventory.xlsx"
Dim workbook As WorkBook = WorkBook.Load(filePath)
Dim worksheet As WorkSheet = workbook.WorkSheets(0)

' First row as headers (true) or as data (false)
Dim dataTableWithHeaders As DataTable = worksheet.ToDataTable(True)
Dim dataTableWithoutHeaders As DataTable = worksheet.ToDataTable(False)

' Process each row in the DataTable
For Each row As DataRow In dataTableWithHeaders.Rows
    For i As Integer = 0 To dataTableWithHeaders.Columns.Count - 1
        Dim value As Object = row(i)
        Console.Write($"{value}" & vbTab)
    Next
    Console.WriteLine()
Next
$vbLabelText   $csharpLabel

Resultado

Importación de un archivo de Excel a DataTable con IronXL: Imagen 2 - Resultado para importar y leer un archivo de Excel a DataTable

Esta flexibilidad hace que IronXL sea ideal para procesar archivos de hojas de cálculo de Excel independientemente de su estructura. A diferencia del paquete EPPlus o los métodos tradicionales que requieren nuevas instancias de OleDbDataAdapter, IronXL maneja la conversión en una sola llamada de método. La biblioteca admite .NET Core, .NET Framework y la implementación multiplataforma sin necesidad de instalar Microsoft Excel.

¿Cómo convertir varias hojas de cálculo de Excel en un conjunto de datos?

Cuando su libro de Excel contiene varias hojas, la conversión a un DataSet conserva cada hoja de cálculo de Excel como una DataTable independiente dentro de la colección. Este enfoque es esencial para las aplicaciones de informes y el procesamiento de datos de varias hojas.

using IronXL;
using System;
using System.Data;
// Load multi-sheet workbook
WorkBook workbook = WorkBook.Load("quarterly-reports.xlsx");
// Convert entire workbook to DataSet (each sheet becomes a DataTable)
DataSet dataset = workbook.ToDataSet();
// Iterate through all tables in the DataSet
foreach (DataTable table in dataset.Tables)
{
    Console.WriteLine($"Sheet: {table.TableName}");
    Console.WriteLine($"Rows: {table.Rows.Count}, Columns: {table.Columns.Count}");
    foreach (DataRow row in table.Rows)
    {
        Console.WriteLine(string.Join(", ", row.ItemArray));
    }
}
using IronXL;
using System;
using System.Data;
// Load multi-sheet workbook
WorkBook workbook = WorkBook.Load("quarterly-reports.xlsx");
// Convert entire workbook to DataSet (each sheet becomes a DataTable)
DataSet dataset = workbook.ToDataSet();
// Iterate through all tables in the DataSet
foreach (DataTable table in dataset.Tables)
{
    Console.WriteLine($"Sheet: {table.TableName}");
    Console.WriteLine($"Rows: {table.Rows.Count}, Columns: {table.Columns.Count}");
    foreach (DataRow row in table.Rows)
    {
        Console.WriteLine(string.Join(", ", row.ItemArray));
    }
}
Imports IronXL
Imports System
Imports System.Data

' Load multi-sheet workbook
Dim workbook As WorkBook = WorkBook.Load("quarterly-reports.xlsx")
' Convert entire workbook to DataSet (each sheet becomes a DataTable)
Dim dataset As DataSet = workbook.ToDataSet()
' Iterate through all tables in the DataSet
For Each table As DataTable In dataset.Tables
    Console.WriteLine($"Sheet: {table.TableName}")
    Console.WriteLine($"Rows: {table.Rows.Count}, Columns: {table.Columns.Count}")
    For Each row As DataRow In table.Rows
        Console.WriteLine(String.Join(", ", row.ItemArray))
    Next
Next
$vbLabelText   $csharpLabel

Resultado

Importación de un archivo de Excel a DataTable con IronXL: Imagen 3 - Resultado de la importación de un archivo de Excel de varias hojas a DataSet

El método ToDataSet crea un nuevo DataSet que contiene objetos DataTable para cada hoja de cálculo. La propiedad TableName de cada tabla refleja el nombre de la hoja de Excel original, lo que facilita la referencia a datos específicos durante el procesamiento.

¿Cómo puedo importar datos de Excel a una base de datos?

Un flujo de trabajo común implica leer datos de archivos Excel e insertarlos en un sistema de base de datos. La estructura DataTable se integra perfectamente con ADO.NET para operaciones de base de datos.

using IronXL;
using System.Data;
using System.Data.SqlClient;
string filePath = @"C:\imports\customer-data.xlsx";
WorkBook workbook = WorkBook.Load(filePath);
WorkSheet worksheet = workbook.DefaultWorkSheet;
// Convert Excel data to DataTable
DataTable dt = worksheet.ToDataTable(true);
// Validate data before database insert
if (dt == null || dt.Rows.Count == 0)
{
    Console.WriteLine("No data to import");
    return;
}
// Insert into database using SqlBulkCopy
string connectionString = "Server=.;Database=Sales;Trusted_Connection=True;";
using (SqlConnection connection = new SqlConnection(connectionString))
{
    connection.Open();
    using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connection))
    {
        bulkCopy.DestinationTableName = "Customers";
        bulkCopy.WriteToServer(dt);
    }
}
Console.WriteLine($"Imported {dt.Rows.Count} records successfully");
using IronXL;
using System.Data;
using System.Data.SqlClient;
string filePath = @"C:\imports\customer-data.xlsx";
WorkBook workbook = WorkBook.Load(filePath);
WorkSheet worksheet = workbook.DefaultWorkSheet;
// Convert Excel data to DataTable
DataTable dt = worksheet.ToDataTable(true);
// Validate data before database insert
if (dt == null || dt.Rows.Count == 0)
{
    Console.WriteLine("No data to import");
    return;
}
// Insert into database using SqlBulkCopy
string connectionString = "Server=.;Database=Sales;Trusted_Connection=True;";
using (SqlConnection connection = new SqlConnection(connectionString))
{
    connection.Open();
    using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connection))
    {
        bulkCopy.DestinationTableName = "Customers";
        bulkCopy.WriteToServer(dt);
    }
}
Console.WriteLine($"Imported {dt.Rows.Count} records successfully");
Imports IronXL
Imports System.Data
Imports System.Data.SqlClient

Module Module1
    Sub Main()
        Dim filePath As String = "C:\imports\customer-data.xlsx"
        Dim workbook As WorkBook = WorkBook.Load(filePath)
        Dim worksheet As WorkSheet = workbook.DefaultWorkSheet
        ' Convert Excel data to DataTable
        Dim dt As DataTable = worksheet.ToDataTable(True)
        ' Validate data before database insert
        If dt Is Nothing OrElse dt.Rows.Count = 0 Then
            Console.WriteLine("No data to import")
            Return
        End If
        ' Insert into database using SqlBulkCopy
        Dim connectionString As String = "Server=.;Database=Sales;Trusted_Connection=True;"
        Using connection As New SqlConnection(connectionString)
            connection.Open()
            Using bulkCopy As New SqlBulkCopy(connection)
                bulkCopy.DestinationTableName = "Customers"
                bulkCopy.WriteToServer(dt)
            End Using
        End Using
        Console.WriteLine($"Imported {dt.Rows.Count} records successfully")
    End Sub
End Module
$vbLabelText   $csharpLabel

Este código demuestra cómo cargar un archivo Excel, convertirlo en una DataTable y realizar una inserción masiva en una base de datos. La comprobación nula garantiza la integridad de los datos antes de intentar la operación de importación.

¿Cómo exportar una tabla de datos a Excel?

IronXL admite el flujo de datos bidireccional, lo que le permite crear archivos Excel a partir de objetos DataTable para escenarios de informes y exportación de datos.

using IronXL;
using System.Data;
// Create sample DataTable
DataTable dt = new DataTable("Products");
dt.Columns.Add("ProductID", typeof(int));
dt.Columns.Add("Name", typeof(string));
dt.Columns.Add("Price", typeof(decimal));
dt.Rows.Add(1, "Widget", 29.99m);
dt.Rows.Add(2, "Gadget", 49.99m);
// Create new workbook and load DataTable
WorkBook workbook = WorkBook.Create();
workbook.LoadWorkSheetsFromDataSet(new DataSet { Tables = { dt } });
// Save as Excel file
workbook.SaveAs("exported-products.xlsx");
using IronXL;
using System.Data;
// Create sample DataTable
DataTable dt = new DataTable("Products");
dt.Columns.Add("ProductID", typeof(int));
dt.Columns.Add("Name", typeof(string));
dt.Columns.Add("Price", typeof(decimal));
dt.Rows.Add(1, "Widget", 29.99m);
dt.Rows.Add(2, "Gadget", 49.99m);
// Create new workbook and load DataTable
WorkBook workbook = WorkBook.Create();
workbook.LoadWorkSheetsFromDataSet(new DataSet { Tables = { dt } });
// Save as Excel file
workbook.SaveAs("exported-products.xlsx");
Imports IronXL
Imports System.Data

' Create sample DataTable
Dim dt As New DataTable("Products")
dt.Columns.Add("ProductID", GetType(Integer))
dt.Columns.Add("Name", GetType(String))
dt.Columns.Add("Price", GetType(Decimal))
dt.Rows.Add(1, "Widget", 29.99D)
dt.Rows.Add(2, "Gadget", 49.99D)

' Create new workbook and load DataTable
Dim workbook As WorkBook = WorkBook.Create()
workbook.LoadWorkSheetsFromDataSet(New DataSet With {.Tables = {dt}})

' Save as Excel file
workbook.SaveAs("exported-products.xlsx")
$vbLabelText   $csharpLabel

Resultado

Importación de un archivo de Excel a DataTable con IronXL: Imagen 4 - DataTable exportado a Excel

El método LoadWorkSheetsFromDataSet acepta un DataSet que contiene sus objetos DataTable y crea hojas de trabajo correspondientes. Obtenga más información sobre cómo exportar DataTable a Excel en la documentación.

Conclusión

IronXL transforma la complejidad de la conversión de Excel a DataTable en llamadas de método sencillas. Ya sea que se importe una sola hoja de cálculo de Excel o se procesen libros de trabajo de varias hojas en un conjunto de datos completo, la biblioteca maneja archivos XLSX, conversión de tipos de datos y carga basada en secuencias de manera eficiente.

La combinación de la flexibilidad de DataTable y la API intuitiva de IronXL permite flujos de trabajo de datos potentes para la integración de bases de datos, sistemas de informes y vinculación de datos de aplicaciones. Descargue IronXL para optimizar el procesamiento de datos de Excel o compre una licencia para su implementación en producción.

Empiece con IronXL ahora.
green arrow pointer

Preguntas Frecuentes

¿Cómo puedo importar un archivo de Excel a una DataTable usando C#?

Puede usar IronXL para importar fácilmente archivos de Excel a una DataTable en C#. IronXL proporciona una API sencilla para cargar archivos de Excel y convertirlos en DataTables para su posterior manipulación.

¿Cuáles son los beneficios de usar IronXL para la manipulación de archivos de Excel en C#?

IronXL ofrece una solución robusta para manipular archivos de Excel en C#, incluyendo la lectura, escritura y conversión de datos de Excel a diversos formatos, como DataTables. Es compatible con los principales tipos de archivos de Excel y ofrece un alto rendimiento y facilidad de uso.

¿Es IronXL compatible con .NET Core?

Sí, IronXL es totalmente compatible con .NET Core, lo que permite el desarrollo y la implementación multiplataforma de aplicaciones que requieren la manipulación de archivos de Excel.

¿Puedo usar IronXL para leer archivos Excel en diferentes formatos?

IronXL admite la lectura de archivos de Excel en varios formatos, incluidos XLSX, XLS, CSV y TSV, lo que ofrece flexibilidad para manejar diferentes tipos de datos de Excel.

¿IronXL admite funciones de seguridad de archivos de Excel?

Sí, IronXL admite archivos de Excel protegidos con contraseña, lo que le permite cargar y trabajar con documentos de Excel seguros en sus aplicaciones C#.

¿Cómo convierto un archivo Excel a un DataTable usando IronXL?

Con IronXL, puede convertir un archivo de Excel en un DataTable cargando el libro, seleccionando la hoja de cálculo y utilizando los métodos integrados para exportar los datos de la hoja de cálculo a un DataTable.

¿Qué tipos de aplicaciones pueden beneficiarse del uso de IronXL?

IronXL es ideal para cualquier aplicación que requiera manipulación de datos de Excel, como herramientas de análisis de datos, sistemas de informes o cualquier software que necesite importar, exportar o modificar datos de Excel.

¿Se puede utilizar IronXL para editar archivos Excel después de importarlos a una DataTable?

Sí, IronXL le permite editar y actualizar archivos de Excel incluso después de importarlos a una DataTable, lo que proporciona una experiencia perfecta para modificar y guardar cambios.

¿Qué nivel de experiencia en codificación se necesita para utilizar IronXL?

IronXL está diseñado para facilitar su uso, con una API fácil de usar que puede ser utilizada por desarrolladores de todos los niveles de experiencia, lo que lo hace accesible tanto para principiantes como para usuarios avanzados.

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