Leer archivos de Excel en ASP.NET MVC usando C# con IronXL

This article was translated from English: Does it need improvement?
Translated
View the article in English

IronXL permite a los desarrolladores de ASP.NET MVC leer archivos de Excel directamente en C# sin dependencias de Microsoft Office, convirtiendo los datos de Excel en System.Data.DataTable para una fácil visualización en vistas web con sólo unas pocas líneas de código.

Inicio rápido: Cargar y convertir hoja de Excel a DataTable en MVC

Este ejemplo muestra cómo empezar en cuestión de segundos: cargar un libro de Excel, elegir su primera hoja de cálculo y convertirlo en un System.Data.DataTable usando IronXL - sin Interop, sin problemas.

Nuget IconEmpieza a crear PDF con NuGet ahora:

  1. Instalar IronXL con el gestor de paquetes NuGet

    PM > Install-Package IronXL.Excel

  2. Copie y ejecute este fragmento de código.

    var dataTable = IronXL.WorkBook.Load("CustomerData.xlsx").DefaultWorkSheet.ToDataTable(true);
  3. Despliegue para probar en su entorno real

    Empieza a utilizar IronXL en tu proyecto hoy mismo con una prueba gratuita
    arrow pointer

¿Cómo crear un proyecto ASP.NET para leer en Excel?

¿Por qué Visual Studio 2022 funciona mejor para esto?

Con Visual Studio 2022, cree un nuevo proyecto ASP.NET. Visual Studio 2022 ofrece una excelente compatibilidad con los frameworks .NET 6+, un IntelliSense mejorado para los métodos IronXL y un mejor rendimiento cuando se trabaja con archivos Excel de gran tamaño. La integración NuGet del IDE hace que la instalación de IronXL sea especialmente sencilla.

¿Qué plantilla de proyecto debo elegir?

Para leer archivos Excel en ASP.NET, elija la plantilla "ASP.NET Core Web App (Model-View-Controller)". Esta plantilla ofrece una estructura MVC limpia que separa el procesamiento de datos (lectura de Excel) de la lógica de presentación. El patrón MVC funciona perfectamente con la conversión DataTable de IronXL, lo que permite cargar hojas de cálculo en controladores y mostrarlas en vistas sin problemas.

¿Qué versión de .NET se recomienda?

IronXL funciona con .NET Framework 4.6.2+ y .NET Core 3.1+. Para los nuevos proyectos ASP.NET MVC, utilice .NET 6.0 o superior para obtener un rendimiento y una seguridad óptimos. Estas versiones ofrecen una mejor gestión de la memoria al procesar grandes archivos de Excel y un mejor soporte async/await para convertir tipos de archivos de hojas de cálculo.

¿Cómo instalo la biblioteca IronXL?

¿Cuáles son los requisitos de instalación?


¿Qué método de instalación es más rápido?

Tras crear el nuevo proyecto, instala la biblioteca IronXL. Siga estos pasos para instalar IronXL. Abre la Consola del Administrador de Paquetes NuGet y ejecuta el siguiente comando:

Install-Package IronXL.Excel

¿Cómo puedo verificar la instalación?

Para verificar que IronXL está correctamente instalado, compruebe las dependencias de su proyecto en el Explorador de soluciones. Debería ver "IronXL" en la lista de "Dependencias > Paquetes". Además, intente añadir usando IronXL; en la parte superior de su archivo de controlador - IntelliSense debería reconocer el espacio de nombres inmediatamente. Para solucionar problemas de instalación, visite la guía de licencias.

¿Cómo leo un archivo Excel en mi controlador?

¿Qué código va en la acción del controlador?

Abra el controlador predeterminado de su proyecto ASP.NET (por ejemplo, HomeController.cs) y sustituya el método Index por el siguiente código:

using IronXL;
using System.Data;

public ActionResult Index()
{
    // Load the Excel workbook from a specified path.
    WorkBook workBook = WorkBook.Load(@"C:\Files\Customer Data.xlsx");

    // Access the first worksheet from the workbook.
    WorkSheet workSheet = workBook.WorkSheets.First();

    // Convert the worksheet data to a DataTable object.
    // The 'true' parameter uses the first row as column headers
    var dataTable = workSheet.ToDataTable(true);

    // Send the DataTable to the view for rendering.
    return View(dataTable);
}
using IronXL;
using System.Data;

public ActionResult Index()
{
    // Load the Excel workbook from a specified path.
    WorkBook workBook = WorkBook.Load(@"C:\Files\Customer Data.xlsx");

    // Access the first worksheet from the workbook.
    WorkSheet workSheet = workBook.WorkSheets.First();

    // Convert the worksheet data to a DataTable object.
    // The 'true' parameter uses the first row as column headers
    var dataTable = workSheet.ToDataTable(true);

    // Send the DataTable to the view for rendering.
    return View(dataTable);
}
$vbLabelText   $csharpLabel

¿Por qué utilizar DataTable en lugar de otros formatos?

En el método de acción Index, cargue el archivo de Excel utilizando el método Load de IronXL. La ruta del archivo Excel (incluyendo el nombre del archivo) se proporciona como un parámetro a la llamada del método. A continuación, seleccione la primera hoja de Excel como hoja de trabajo y cargue los datos que contiene en un objeto DataTable. Por último, envía el DataTable al frontend.

DataTable es ideal para ASP.NET MVC porque se integra perfectamente con las vistas Razor y proporciona soporte incorporado para iterar a través de filas y columnas. A diferencia de los objetos personalizados, DataTable no requiere mapeo de modelos y maneja tipos de datos mixtos de forma automática. También puede exportar DataSet y DataTable a Excel cuando sea necesario.

¿Qué pasa con la gestión de errores de los archivos que faltan?

La gestión de errores garantiza que la aplicación no se bloquee si faltan archivos de Excel o están dañados. Aquí tienes una versión mejorada con un tratamiento adecuado de las excepciones:

public ActionResult Index()
{
    try
    {
        string filePath = @"C:\Files\Customer Data.xlsx";

        // Check if file exists before attempting to load
        if (!System.IO.File.Exists(filePath))
        {
            ViewBag.Error = "Excel file not found at specified location.";
            return View(new DataTable());
        }

        // Load workbook with error handling
        WorkBook workBook = WorkBook.Load(filePath);

        // Verify worksheet exists
        if (workBook.WorkSheets.Count == 0)
        {
            ViewBag.Error = "No worksheets found in the Excel file.";
            return View(new DataTable());
        }

        WorkSheet workSheet = workBook.WorkSheets.First();
        var dataTable = workSheet.ToDataTable(true);

        return View(dataTable);
    }
    catch (Exception ex)
    {
        // Log the exception (consider using a logging framework)
        ViewBag.Error = $"Error reading Excel file: {ex.Message}";
        return View(new DataTable());
    }
}
public ActionResult Index()
{
    try
    {
        string filePath = @"C:\Files\Customer Data.xlsx";

        // Check if file exists before attempting to load
        if (!System.IO.File.Exists(filePath))
        {
            ViewBag.Error = "Excel file not found at specified location.";
            return View(new DataTable());
        }

        // Load workbook with error handling
        WorkBook workBook = WorkBook.Load(filePath);

        // Verify worksheet exists
        if (workBook.WorkSheets.Count == 0)
        {
            ViewBag.Error = "No worksheets found in the Excel file.";
            return View(new DataTable());
        }

        WorkSheet workSheet = workBook.WorkSheets.First();
        var dataTable = workSheet.ToDataTable(true);

        return View(dataTable);
    }
    catch (Exception ex)
    {
        // Log the exception (consider using a logging framework)
        ViewBag.Error = $"Error reading Excel file: {ex.Message}";
        return View(new DataTable());
    }
}
$vbLabelText   $csharpLabel

¿Cómo puedo seleccionar diferentes hojas de cálculo?

IronXL proporciona múltiples formas de seleccionar y trabajar con hojas de cálculo específicas. Puede acceder a las hojas de cálculo por índice, nombre o iterar por todas las hojas disponibles:

// Method 1: Select by worksheet name
WorkSheet namedSheet = workBook.GetWorkSheet("Sales Data");

// Method 2: Select by index (zero-based)
WorkSheet secondSheet = workBook.WorkSheets[1];

// Method 3: Select the default/active worksheet
WorkSheet defaultSheet = workBook.DefaultWorkSheet;

// Method 4: Iterate through all worksheets
foreach (WorkSheet sheet in workBook.WorkSheets)
{
    string sheetName = sheet.Name;
    // Process each worksheet
}
// Method 1: Select by worksheet name
WorkSheet namedSheet = workBook.GetWorkSheet("Sales Data");

// Method 2: Select by index (zero-based)
WorkSheet secondSheet = workBook.WorkSheets[1];

// Method 3: Select the default/active worksheet
WorkSheet defaultSheet = workBook.DefaultWorkSheet;

// Method 4: Iterate through all worksheets
foreach (WorkSheet sheet in workBook.WorkSheets)
{
    string sheetName = sheet.Name;
    // Process each worksheet
}
$vbLabelText   $csharpLabel

¿Cómo mostrar datos de Excel en una página web?

¿Qué código de vista se necesita?

El siguiente ejemplo muestra cómo mostrar la Tabla de datos devuelta en el ejemplo anterior en un navegador web.

A continuación se muestra el archivo Excel de trabajo utilizado en este ejemplo:

Excel spreadsheet with customer names, shipping costs, and unit prices - sample data for web display tutorial

Archivo de Excel

Abra el index.cshtml (vista de índice) y sustituya el código por el siguiente código HTML:

@{
    ViewData["Title"] = "Home Page";
}

@using System.Data
@model DataTable

<div class="text-center">
    <h1 class="display-4">Welcome to IronXL Read Excel MVC</h1>
</div>

@* Check for errors first *@
@if (ViewBag.Error != null)
{
    <div class="alert alert-danger">
        @ViewBag.Error
    </div>
}

@* Display table only if data exists *@
@if (Model != null && Model.Rows.Count > 0)
{
    <table class="table table-dark">
        <tbody>
            @foreach (DataRow row in Model.Rows)
            {
                <tr>
                    @for (int i = 0; i < Model.Columns.Count; i++)
                    {
                        <td>@row[i]</td>
                    }
                </tr>
            }
        </tbody>
    </table>
}
else
{
    <p>No data to display.</p>
}
@{
    ViewData["Title"] = "Home Page";
}

@using System.Data
@model DataTable

<div class="text-center">
    <h1 class="display-4">Welcome to IronXL Read Excel MVC</h1>
</div>

@* Check for errors first *@
@if (ViewBag.Error != null)
{
    <div class="alert alert-danger">
        @ViewBag.Error
    </div>
}

@* Display table only if data exists *@
@if (Model != null && Model.Rows.Count > 0)
{
    <table class="table table-dark">
        <tbody>
            @foreach (DataRow row in Model.Rows)
            {
                <tr>
                    @for (int i = 0; i < Model.Columns.Count; i++)
                    {
                        <td>@row[i]</td>
                    }
                </tr>
            }
        </tbody>
    </table>
}
else
{
    <p>No data to display.</p>
}
$vbLabelText   $csharpLabel

¿Por qué usar Bootstrap para el diseño de tablas?

El código anterior usa el DataTable devuelto por el método Index como modelo. Cada fila de la tabla se imprime en la página web usando un bucle @for, incluyendo el formateo de Bootstrap para decoración.

Bootstrap ofrece diseños de tablas adaptables que se ajustan automáticamente a distintos tamaños de pantalla, algo crucial para las aplicaciones web modernas. La clase table-dark crea una atractiva tabla de tema oscuro fácil de leer. Para formatos de Excel más avanzados como borde y alineación de celdas o patrones y colores de fondo, IronXL proporciona métodos adicionales para acceder directamente a los datos estructurados.

¿Cómo es el resultado final?

Al ejecutar el proyecto se obtienen los resultados que se muestran a continuación:

Bootstrap table displaying Excel customer data with names, shipping costs, and unit prices in ASP.NET MVC application

Tabla Bootstrap

¿Cómo puedo añadir encabezados a la tabla?

Para mostrar los encabezados de columna de su archivo Excel, modifique el código de la vista para incluir una sección de encabezado de tabla. Al llamar a ToDataTable(true), IronXL utiliza automáticamente la primera fila como nombres de columna:

@if (Model != null && Model.Rows.Count > 0)
{
    <table class="table table-dark">
        <thead>
            <tr>
                @foreach (DataColumn column in Model.Columns)
                {
                    <th>@column.ColumnName</th>
                }
            </tr>
        </thead>
        <tbody>
            @foreach (DataRow row in Model.Rows)
            {
                <tr>
                    @for (int i = 0; i < Model.Columns.Count; i++)
                    {
                        <td>@row[i]</td>
                    }
                </tr>
            }
        </tbody>
    </table>
}
@if (Model != null && Model.Rows.Count > 0)
{
    <table class="table table-dark">
        <thead>
            <tr>
                @foreach (DataColumn column in Model.Columns)
                {
                    <th>@column.ColumnName</th>
                }
            </tr>
        </thead>
        <tbody>
            @foreach (DataRow row in Model.Rows)
            {
                <tr>
                    @for (int i = 0; i < Model.Columns.Count; i++)
                    {
                        <td>@row[i]</td>
                    }
                </tr>
            }
        </tbody>
    </table>
}
$vbLabelText   $csharpLabel

Esta mejora muestra los encabezados de columna adecuados como "Nombre del cliente", "Coste de envío" y "Precio unitario" de su archivo Excel. Para escenarios más complejos que implican rangos con nombre o tablas con nombre, IronXL proporciona métodos adicionales para acceder directamente a datos estructurados.

Preguntas Frecuentes

¿Cómo puedo leer archivos Excel en ASP.NET MVC sin Microsoft Office?

IronXL le permite leer archivos de Excel directamente en C# sin ninguna dependencia de Microsoft Office. Simplemente instale IronXL a través de NuGet, luego utilice WorkBook.Load() para abrir su archivo de Excel y convertirlo en una DataTable con sólo una línea de código: var dataTable = IronXL.WorkBook.Load('CustomerData.xlsx').DefaultWorkSheet.ToDataTable(true);

¿Cuál es la forma más rápida de convertir datos de Excel a DataTable en ASP.NET?

IronXL proporciona el método ToDataTable() que convierte instantáneamente las hojas de cálculo de Excel en objetos System.Data.DataTable. Después de cargar su libro de trabajo con IronXL, acceda a cualquier hoja de cálculo y llame a ToDataTable(true) para incluir los encabezados. Esta conversión sólo requiere una línea de código y funciona perfectamente con las vistas MVC de ASP.NET.

¿Qué versión de .NET debo utilizar para el procesamiento de archivos Excel en aplicaciones web?

IronXL es compatible con .NET Framework 4.6.2+ y .NET Core 3.1+. Para los nuevos proyectos ASP.NET MVC, se recomienda .NET 6.0 o superior, ya que ofrece una mejor gestión de la memoria al procesar grandes archivos de Excel con IronXL y un mejor soporte async/await para las operaciones de hoja de cálculo.

¿Qué plantilla de proyecto de Visual Studio funciona mejor para la funcionalidad de lectura de Excel?

Elija la plantilla 'ASP.NET Core Web App (Model-View-Controller)' al crear su proyecto. Esta estructura MVC complementa perfectamente la función de conversión DataTable de IronXL, lo que le permite cargar y procesar archivos de Excel en controladores mientras muestra los datos limpiamente en vistas.

¿Cómo instalo la biblioteca de lectura de Excel en mi proyecto ASP.NET?

Instale IronXL a través de la consola del administrador de paquetes NuGet ejecutando 'Install-Package IronXL.Excel'. Después de la instalación, verifica que se ha añadido correctamente comprobando las dependencias de tu proyecto y añadiendo 'using IronXL;' a tu controlador - IntelliSense debería reconocer el espacio de nombres inmediatamente.

Curtis Chau
Escritor Técnico

Curtis Chau tiene una licenciatura en Ciencias de la Computación (Carleton University) y se especializa en el desarrollo front-end con experiencia en Node.js, TypeScript, JavaScript y React. Apasionado por crear interfaces de usuario intuitivas y estéticamente agradables, disfruta trabajando con frameworks modernos y creando manuales bien ...

Leer más
¿Listo para empezar?
Nuget Descargas 1,802,965 | Versión: 2025.12 recién lanzado