Pruebas en un entorno real
Pruebe en producción sin marcas de agua.
Funciona donde lo necesites.
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.
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 yleer 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, solicitarfórmulasguardar 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 condicionaly 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.
En primer lugar, vamos a crear un nuevo proyecto ASP.NET MVC en Visual Studio.
Abre Visual Studio.
Haga clic en Archivo > Nuevo > Proyecto.
En la ventana de nuevo proyecto, seleccione ASP.NET Web Application(.NET Framework) Plantilla.
Crear una nueva aplicación web ASP.NET en Visual Studio
Nombre su proyecto ExcelViewer, seleccione la ubicación del proyecto y haga clic en el botón Crear.
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.
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.
Haga clic con el botón derecho en su proyecto en el Explorador de soluciones y vaya a Administrar paquetes NuGet**.
En el Administrador de paquetes NuGet, busque IronXL.Excel.
Haga clic en Instalar para añadirlo a su proyecto.
**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
Instala el paquete IronXL desde la consola del gestor de paquetes
Ahora que IronXL está instalado, pasemos al siguiente paso.
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
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.
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
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.
ExcelController
para cargar ficheros Excel para la extracción de datosA continuación, cree un nuevo ExcelController
. Aquí es donde ocurre la magia! Los archivos de Excel se cargan utilizando la función de IronXLWorkBook.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();
// Define the file path
string filePath = Server.MapPath("~/App_Data/Test.xlsx");
// Replace 'Test.xlsx' with your file name
List<ExcelModel> data = new List<ExcelModel>();
try
{
// Load workbook directly from a file path
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();
// Define the file path
string filePath = Server.MapPath("~/App_Data/Test.xlsx");
// Replace 'Test.xlsx' with your file name
List<ExcelModel> data = new List<ExcelModel>();
try
{
// Load workbook directly from a file path
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()
' Define the file path
Dim filePath As String = Server.MapPath("~/App_Data/Test.xlsx")
' Replace 'Test.xlsx' with your file name
Dim data As New List(Of ExcelModel)()
Try
' Load workbook directly from a file path
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
Aquí, inicializa un(n) ExcelViewModel
y luego cargar elLibro de trabajo utilizando IronXL, repasa cadaHoja de trabajoy 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:
**Archivo Excel de ejemplo
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
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.
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.
**El visor de Excel
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 unaprueba gratuitaque 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 $749.
9 productos API .NET para sus documentos de oficina