USO DE IRONXL

Cómo ver Excel en ASP.NET

Actualizado 27 de junio, 2023
Compartir:

Este completo tutorial demostrará cómo construir un visor de Excel utilizando ASP.NET MVC y IronXL. Este visor permitirá a los usuarios visualizar, editar y navegar por archivos Excel directamente desde su página web.

¿Qué es IronXL?

IronXL es una potente biblioteca .NET que proporciona una plétora de funcionalidades relacionadas con las operaciones de Excel. Ofrece una API simplificada que permite a los desarrolladores .NET escribir, manipular y leer documentos Excel en varios formatos de archivo, como XLS, XLSX, CSV, etc.

Con IronXL, puedes leer archivos de Excel, extraer datosañadir o editar hojas de cálculo, crear o modificar filas y columnas, solicitar fórmulas guardar cambios y mucho más. Todas estas operaciones pueden realizarse sin necesidad de que Microsoft Excel esté instalado en su máquina.

IronXL admite imágenes y estilos, formato condicional y otras funciones complejas de Excel, lo que la convierte en una solución completa para las operaciones de .NET Excel. Es perfecto para gestionar los requisitos de fuentes de datos y hojas de cálculo de sus aplicaciones ASP.NET MVC. La biblioteca IronXL se utilizará para visualizar archivos Excel en aplicaciones web ASP.NET.

Requisitos previos

  • Conocimientos básicos de ASP.NET MVC
  • Visual Studio instalado en su equipo
  • Instalado el IronXL biblioteca. Puedes encontrar la guía de instalación en su documentación oficial.

Primeros pasos

En primer lugar, vamos a crear un nuevo proyecto ASP.NET MVC en Visual Studio.

  1. Abre Visual Studio.
  2. Haga clic en Archivo > Nuevo > Proyecto.
  3. En la ventana de nuevo proyecto, seleccione ASP.NET Web Application (.NET Framework) Plantilla.

    Cómo ver Excel en ASP.NET, Figura 1: Crear una nueva aplicación web ASP.NET en Visual Studio

     **Crear una nueva aplicación web ASP.NET en Visual Studio**
  4. Nombre su proyecto ExcelViewer, seleccione la ubicación del proyecto y haga clic en el botón Crear.

    Cómo ver Excel en ASP.NET, Figura 2: Configure su proyecto

     **Configura tu proyecto**

    Este artículo se centrará en la implementación de la funcionalidad del visor de Excel en esta aplicación ASP.NET MVC.

Cómo añadir IronXL a su proyecto

Para manejar formatos de archivo Excel (como .xls, .xlsx y .csv)ironXL ofrece funciones completas para cargar documentos de Excel, leer, escribir e incluso modificar datos de Excel. Admite fórmulas, imágenes, formatos y mucho más.

  1. Haga clic con el botón derecho en su proyecto en el Explorador de soluciones y vaya a Administrar paquetes NuGet**.
  2. En el Administrador de paquetes NuGet, busque IronXL.Excel.
  3. Haga clic en Instalar para añadirlo a su proyecto.

    Cómo ver Excel en ASP.NET, Figura 3: Buscar e instalar el paquete IronXL en la interfaz de usuario del gestor de paquetes NuGet

     **Busca e instala el paquete IronXL en la interfaz de usuario del gestor de paquetes NuGet

    También puede instalar IronXL utilizando la Consola del Administrador de Paquetes con el siguiente comando:

Install-Package IronXL.Excel

Cómo ver Excel en ASP.NET, Figura 4: Instalar el paquete IronXL desde la consola del gestor de paquetes

Instala el paquete IronXL desde la consola del gestor de paquetes

Ahora que IronXL está instalado, pasemos al siguiente paso.

Construir modelos

ModeloExcel

El primer paso consiste en crear un modelo para los datos de Excel. La clase ExcelModel representará una única hoja Excel y contendrá el nombre de la hoja y los datos presentes en la hoja Excel.

namespace Excel_File_Viewer_IronXL.Models
{
    public class ExcelModel
    {
        public string SheetName { get; set; }
        public List<string []> Data { get; set; }
    }
}
namespace Excel_File_Viewer_IronXL.Models
{
    public class ExcelModel
    {
        public string SheetName { get; set; }
        public List<string []> Data { get; set; }
    }
}
Namespace Excel_File_Viewer_IronXL.Models
	Public Class ExcelModel
		Public Property SheetName() As String
		Public Property Data() As List(Of String ())
	End Class
End Namespace
VB   C#

El ExcelModel se define con dos propiedades, SheetName y Data. SheetName es una cadena simple para contener el nombre de cada hoja de Excel. Data es una lista de matrices de cadenas para almacenar los datos de cada fila de la hoja Excel.

ExcelViewModel

A continuación, vamos a crear ExcelViewModel. Este modelo es una envoltura que contiene un archivo, un mensaje y una lista de ExcelModel que representa los datos de todas las hojas del archivo.

using Microsoft.AspNetCore.Http;
using System.Collections.Generic;

namespace Excel_File_Viewer_IronXL.Models
{
    public class ExcelViewModel
    {
        public IFormFile File { get; set; }
        public string Message { get; set; }
        public List<ExcelModel> ExcelData { get; set; }
    }
}
using Microsoft.AspNetCore.Http;
using System.Collections.Generic;

namespace Excel_File_Viewer_IronXL.Models
{
    public class ExcelViewModel
    {
        public IFormFile File { get; set; }
        public string Message { get; set; }
        public List<ExcelModel> ExcelData { get; set; }
    }
}
Imports Microsoft.AspNetCore.Http
Imports System.Collections.Generic

Namespace Excel_File_Viewer_IronXL.Models
	Public Class ExcelViewModel
		Public Property File() As IFormFile
		Public Property Message() As String
		Public Property ExcelData() As List(Of ExcelModel)
	End Class
End Namespace
VB   C#

Esta clase se utilizará como modelo de vista. Tiene un(n) IFormFile para subir archivos, una cadena Message para mostrar mensajes y una List<ExcelModel> para almacenar los datos Excel recuperados.

5. Crear ExcelController para cargar ficheros Excel para la extracción de datos

A continuación, cree un nuevo ExcelController. Aquí es donde ocurre la magia! Los archivos de Excel se cargan utilizando la función de IronXL WorkBook.Load y se repiten las hojas de cálculo, se extraen los datos y se añaden al ExcelViewModel.

using Excel_File_Viewer_IronXL.Models;
using IronXL;
using System.Collections.Generic;
using System.Web.Mvc;
using System;
using System.Linq;

public class ExcelController : Controller
{
    //  GET: Excel
    public ActionResult Index()
    {
        var model = new ExcelViewModel();

        //  Definir la ruta del archivo
        string filePath = Server.MapPath("~/App_Data/Test.xlsx"); 

    //  Sustituye "Prueba.xlsx" por el nombre de tu archivo

        List<ExcelModel> data = new List<ExcelModel>();

        try
        {
            //  Cargar el libro de trabajo directamente desde una ruta de archivo
            var workbook = WorkBook.Load(filePath);
            foreach (var worksheet in workbook.WorkSheets)
            {
                data.Add(new ExcelModel
                {
                    SheetName = worksheet.Name,
                    Data = worksheet.Rows.Select(r => r.ToArray().Select(c => c.Value.ToString()).ToArray()).ToList()
                });
            }

            model.ExcelData = data;
            model.Message = "File processed successfully!";
        }
        catch (Exception ex)
        {
            model.Message = $"Error occurred while processing file: {ex.Message}";
        }

        return View(model);
    }
}
using Excel_File_Viewer_IronXL.Models;
using IronXL;
using System.Collections.Generic;
using System.Web.Mvc;
using System;
using System.Linq;

public class ExcelController : Controller
{
    //  GET: Excel
    public ActionResult Index()
    {
        var model = new ExcelViewModel();

        //  Definir la ruta del archivo
        string filePath = Server.MapPath("~/App_Data/Test.xlsx"); 

    //  Sustituye "Prueba.xlsx" por el nombre de tu archivo

        List<ExcelModel> data = new List<ExcelModel>();

        try
        {
            //  Cargar el libro de trabajo directamente desde una ruta de archivo
            var workbook = WorkBook.Load(filePath);
            foreach (var worksheet in workbook.WorkSheets)
            {
                data.Add(new ExcelModel
                {
                    SheetName = worksheet.Name,
                    Data = worksheet.Rows.Select(r => r.ToArray().Select(c => c.Value.ToString()).ToArray()).ToList()
                });
            }

            model.ExcelData = data;
            model.Message = "File processed successfully!";
        }
        catch (Exception ex)
        {
            model.Message = $"Error occurred while processing file: {ex.Message}";
        }

        return View(model);
    }
}
Imports Excel_File_Viewer_IronXL.Models
Imports IronXL
Imports System.Collections.Generic
Imports System.Web.Mvc
Imports System
Imports System.Linq

Public Class ExcelController
	Inherits Controller

	'  GET: Excel
	Public Function Index() As ActionResult
		Dim model = New ExcelViewModel()

		'  Definir la ruta del archivo
		Dim filePath As String = Server.MapPath("~/App_Data/Test.xlsx")

	'  Sustituye "Prueba.xlsx" por el nombre de tu archivo

		Dim data As New List(Of ExcelModel)()

		Try
			'  Cargar el libro de trabajo directamente desde una ruta de archivo
			Dim workbook = WorkBook.Load(filePath)
			For Each worksheet In workbook.WorkSheets
				data.Add(New ExcelModel With {
					.SheetName = worksheet.Name,
					.Data = worksheet.Rows.Select(Function(r) r.ToArray().Select(Function(c) c.Value.ToString()).ToArray()).ToList()
				})
			Next worksheet

			model.ExcelData = data
			model.Message = "File processed successfully!"
		Catch ex As Exception
			model.Message = $"Error occurred while processing file: {ex.Message}"
		End Try

		Return View(model)
	End Function
End Class
VB   C#

Aquí, inicializa un(n) ExcelViewModel y luego cargar el Libro de trabajo utilizando IronXL, repasa cada Hoja de trabajo y para cada WorkSheet, creamos un(n) ExcelModel con el nombre y los datos de la hoja de cálculo. El ExcelModel se añade a la lista ExcelData del ExcelViewModel.

Se van a cargar y visualizar los datos del siguiente fichero Excel:

Cómo ver Excel en ASP.NET, Figura 5: El archivo Excel de ejemplo

**Archivo Excel de ejemplo

6. Crear la vista

En su directorio Views/Excel, cree un nuevo archivo HTML Index.cshtml para mostrar los datos de Excel. A continuación, utilice nav-tabs de Bootstrap para representar cada hoja en el archivo de Excel. Cada hoja será una pestaña independiente, y el contenido de la pestaña serán los datos de la hoja.

@model Excel_File_Viewer_IronXL.Models.ExcelViewModel

@{
    ViewBag.Title = "Index";
}

<h2>Excel File Viewer</h2>

@if (Model.ExcelData != null)
{
    <ul class="nav nav-tabs" id="myTab" role="tablist">
        @for (int i = 0; i < Model.ExcelData.Count; i++)
        {
            <li class="nav-item">
                <a class="nav-link @(i == 0 ? "active" : "")" id="tab-@i" data-toggle="tab" href="#content-@i" role="tab" aria-controls="content-@i" aria-selected="@(i == 0)">
                    @Model.ExcelData [i].SheetName
                </a>
            </li>
        }
    </ul>
    <div class="tab-content" id="myTabContent">
        @for (int i = 0; i < Model.ExcelData.Count; i++)
        {
            <div class="tab-pane fade @(i == 0 ? "show active" : "")" id="content-@i" role="tabpanel" aria-labelledby="tab-@i">
                <table class="table table-bordered">
                    @foreach (var row in Model.ExcelData [i].Data)
                    {
                        <tr>
                            @foreach (var cell in row)
                            {
                                <td>@cell</td>
                            }
                        </tr>
                    }
                </table>
            </div>
        }
    </div>
}
@model Excel_File_Viewer_IronXL.Models.ExcelViewModel

@{
    ViewBag.Title = "Index";
}

<h2>Excel File Viewer</h2>

@if (Model.ExcelData != null)
{
    <ul class="nav nav-tabs" id="myTab" role="tablist">
        @for (int i = 0; i < Model.ExcelData.Count; i++)
        {
            <li class="nav-item">
                <a class="nav-link @(i == 0 ? "active" : "")" id="tab-@i" data-toggle="tab" href="#content-@i" role="tab" aria-controls="content-@i" aria-selected="@(i == 0)">
                    @Model.ExcelData [i].SheetName
                </a>
            </li>
        }
    </ul>
    <div class="tab-content" id="myTabContent">
        @for (int i = 0; i < Model.ExcelData.Count; i++)
        {
            <div class="tab-pane fade @(i == 0 ? "show active" : "")" id="content-@i" role="tabpanel" aria-labelledby="tab-@i">
                <table class="table table-bordered">
                    @foreach (var row in Model.ExcelData [i].Data)
                    {
                        <tr>
                            @foreach (var cell in row)
                            {
                                <td>@cell</td>
                            }
                        </tr>
                    }
                </table>
            </div>
        }
    </div>
}
model ReadOnly Property () As Excel_File_Viewer_IronXL.Models.ExcelViewModel
	ViewBag.Title = "Index"
End Property

'INSTANT VB TODO TASK: The following line could not be converted:
(Of h2) Excel File Viewer</h2> [if](Model.ExcelData != Nothing)
If True Then
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: <ul class="nav nav-tabs" id="myTab" role="tablist"> for(int i = 0; i < Model.ExcelData.Count; i++)
	"myTab" role="tablist"> [for](Integer i = 0; i < Model.ExcelData.Count; i)
		If True Then
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: <ul class="nav nav-tabs" id="myTab" role
	"nav nav-tabs" id="myTab" role
	<ul class="nav nav-tabs" id
	i += 1
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: <li class="nav-item"> <a class="nav-link @(i == 0 ? "active" : "")" id="tab-@i" data-toggle="tab" href="#content-@i" role="tab" aria-controls="content-@i" aria-selected="@(i == 0)"> @Model.ExcelData [i].SheetName </a> </li>
			"content-@i" aria-selected="@(i == 0)"> Model.ExcelData (i).SheetName </a> </li>
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: <li class="nav-item"> <a class="nav-link @(i == 0 ? "active" : "")" id="tab-@i" data-toggle="tab" href="#content-@i" role="tab" aria-controls="content-@i" aria-selected
			"tab" aria-controls="content-@i" aria-selected
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: <li class="nav-item"> <a class="nav-link @(i == 0 ? "active" : "")" id="tab-@i" data-toggle="tab" href="#content-@i" role="tab" aria-controls
			"#content-@i" role="tab" aria-controls
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: <li class="nav-item"> <a class="nav-link @(i == 0 ? "active" : "")" id="tab-@i" data-toggle="tab" href="#content-@i" role
			"tab" href="#content-@i" role
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: <li class="nav-item"> <a class="nav-link @(i == 0 ? "active" : "")" id="tab-@i" data-toggle="tab" href
			"tab-@i" data-toggle="tab" href
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: <li class="nav-item"> <a class="nav-link @(i == 0 ? "active" : "")" id="tab-@i" data-toggle
			"nav-link @(i == 0 ? "active" : "")" id="tab-@i" data-toggle
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: <li class="nav-item"> <a class="nav-link @(i == 0 ? "active" : "")" id
			"nav-item"> <a class="nav-link @(i == 0 ? "active" : "")" id
			<li class="nav-item"> <a class
		End If
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: </ul> <div class="tab-content" id="myTabContent"> for(int i = 0; i < Model.ExcelData.Count; i++)
	"tab-content" id="myTabContent"> [for](Integer i = 0; i < Model.ExcelData.Count; i)
		If True Then
	</ul> <div class="tab-content" id
	i += 1
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: <div class="tab-pane fade @(i == 0 ? "show active" : "")" id="content-@i" role="tabpanel" aria-labelledby="tab-@i"> <table class="table table-bordered"> foreach(var row in Model.ExcelData [i].Data)
			"tab-@i"> <table class="table table-bordered"> foreach(var row in Model.ExcelData (i).Data)
					If True Then
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: <div class="tab-pane fade @(i == 0 ? "show active" : "")" id="content-@i" role="tabpanel" aria-labelledby="tab-@i"> <table class
			"tabpanel" aria-labelledby="tab-@i"> <table class
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: <div class="tab-pane fade @(i == 0 ? "show active" : "")" id="content-@i" role="tabpanel" aria-labelledby
			"content-@i" role="tabpanel" aria-labelledby
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: <div class="tab-pane fade @(i == 0 ? "show active" : "")" id="content-@i" role
			"tab-pane fade @(i == 0 ? "show active" : "")" id="content-@i" role
			<div class="tab-pane fade @(i == 0 ? "show active" : "")" id
'INSTANT VB TODO TASK: Local functions are not converted by Instant VB:
'						(Of tr) @foreach(var cell in row)
'							{
'								<td> @cell</td>
'							}
						</tr>
					End If
				</table> </div>
		End If
	</div>
End If
VB   C#

En este ejemplo de código, nav nav-tabs generará una lista de pestañas, cada una de las cuales representará una hoja del fichero Excel. El contenido de la pestaña correspondiente mostrará los datos de la hoja respectiva en formato de tabla. Realizando algunos cambios, se añade un botón de exploración para seleccionar manualmente el archivo Excel.

Ejecución del programa

Una vez que hayas seguido todos los pasos y configurado el proyecto correctamente, es hora de ejecutarlo. Debería ver una página web con pestañas con los nombres de las hojas de su archivo Excel. Al hacer clic en una pestaña, se mostrarán los datos de la hoja correspondiente en formato de tabla.

Cómo ver Excel en ASP.NET, Figura 6: El visor de Excel

**El visor de Excel

Conclusión

Acaba de crear un visor de Excel ASP.NET utilizando IronXL! Esta potente biblioteca permite a los usuarios trabajar con archivos Excel de forma más eficaz y manejable. Con la ayuda de IronXL, trabajar con archivos Excel nunca ha sido tan fácil en el entorno .NET.

IronXL proporciona una prueba gratuita que le permite explorar y comprender su amplia funcionalidad sin ningún coste inicial. Una vez que lo hayas probado y encuentres que es la solución perfecta para tus necesidades, la licencia comienza desde $599.

< ANTERIOR
Cómo convertir archivos XLS a XLSX en C#
SIGUIENTE >
Cómo escribir datos en un archivo CSV en C#

¿Listo para empezar? Versión: 2024.7 recién publicada

Descarga gratuita de NuGet Descargas totales: 897,936 Ver licencias >
123