using IronXL;
using System;
using System.Linq;
// Supported for XLSX, XLS, XLSM, XLTX, CSV and TSV
WorkBook workBook = WorkBook.Load("sample.xlsx");
// Select worksheet at index 0
WorkSheet workSheet = workBook.WorkSheets[0];
// Get any existing worksheet
WorkSheet firstSheet = workBook.DefaultWorkSheet;
// Select a cell and return the converted value
int cellValue = workSheet["A2"].IntValue;
// Read from ranges of cells elegantly.
foreach (var cell in workSheet["A2:A10"])
{
Console.WriteLine("Cell {0} has value '{1}'", cell.AddressString, cell.Text);
}
// Calculate aggregate values such as Min, Max and Sum
decimal sum = workSheet["A2:A10"].Sum();
// Linq compatible
decimal max = workSheet["A2:A10"].Max(c => c.DecimalValue);
Dieses umfassende Tutorial zeigt, wie man einen Excel-Viewer mit ASP.NET MVC und IronXL erstellt. Mit diesem Viewer können Benutzer Excel-Dateien direkt von ihrer Webseite aus anzeigen, bearbeiten und durch sie navigieren.
Was ist IronXL?
IronXL ist eine leistungsstarke .NET-Bibliothek, die eine Vielzahl von Funktionen im Zusammenhang mit Excel-Operationen bietet. Es bietet eine vereinfachte API, die es .NET-Entwicklern ermöglicht, Excel-Dokumente in verschiedenen Dateiformaten wie XLS, XLSX, CSV und mehr zu schreiben, zu bearbeiten und zu lesen.
Mit IronXL können Sie Excel-Dateien lesen, Daten extrahieren, Arbeitsblätter hinzufügen oder bearbeiten, Zeilen und Spalten erstellen oder ändern, Formeln anwenden, Änderungen speichern und vieles mehr. Alle diese Vorgänge können durchgeführt werden, ohne dass Microsoft Excel auf Ihrem Rechner installiert sein muss.
IronXL unterstützt Bilder, Styling, bedingte Formatierung und andere komplexe Excel-Funktionen, was es zu einer umfassenden Lösung für .NET-Excel-Operationen macht. Es ist perfekt für die Handhabung von Datenquellen und Tabellenkalkulationsanforderungen für Ihre ASP.NET MVC-Anwendungen. Die IronXL-Bibliothek wird verwendet, um Excel-Dateien in ASP.NET-Webanwendungen anzuzeigen.
Voraussetzungen
Grundlegendes Verständnis von ASP.NET MVC
Visual Studio auf Ihrem Rechner installiert
Installierte die IronXL-Bibliothek. Die Installationsanleitung finden Sie in der offiziellen Dokumentation des Unternehmens.
Erste Schritte
Erstellen wir zunächst ein neues ASP.NET MVC-Projekt in Visual Studio.
Öffnen Sie Visual Studio.
Klicken Sie auf Datei > Neu > Projekt.
Im neuen Projektfenster wählen Sie die Vorlage ASP.NET-Webanwendung (.NET Framework).
Erstellen Sie eine neue ASP.NET-Webanwendung in Visual Studio
Benennen Sie Ihr Projekt ExcelViewer, wählen Sie den Projektstandort aus und klicken Sie auf die Schaltfläche Erstellen.
Konfigurieren Sie Ihr Projekt
Dieser Artikel konzentriert sich auf die Implementierung der Excel-Viewer-Funktionalität in dieser ASP.NET MVC-Anwendung.
Hinzufügen von IronXL zu Ihrem Projekt
Um Excel-Dateiformate (wie .xls, .xlsx und .csv) zu bearbeiten, bietet IronXL umfassende Funktionen zum Laden von Excel-Dokumenten, Lesen, Schreiben und sogar zum Ändern von Excel-Daten. Es unterstützt Formeln, Bilder, Formatierungen und vieles mehr.
Klicken Sie mit der rechten Maustaste auf Ihr Projekt im Projektmappen-Explorer und navigieren Sie zu NuGet-Pakete verwalten**.
Im NuGet-Paket-Manager suchen Sie nach IronXL.Excel.
Klicken Sie auf Installieren, um es zu Ihrem Projekt hinzuzufügen.
Suchen und installieren Sie das IronXL-Paket im NuGet-Paketmanager-UI
Sie können IronXL auch über die Paketmanager-Konsole mit dem folgenden Befehl installieren:
Install-Package IronXL.Excel
Installieren Sie das IronXL-Paket über die Paket-Manager-Konsole
Nachdem IronXL nun installiert ist, können wir mit dem nächsten Schritt fortfahren.
Modelle bauen
ExcelModel
Der erste Schritt besteht darin, ein Modell für die Excel-Daten zu erstellen. Die ExcelModel-Klasse repräsentiert ein einzelnes Excel-Blatt und enthält den Blattnamen sowie die in dem Excel-Blatt vorhandenen Daten.
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
$vbLabelText $csharpLabel
Das ExcelModel ist mit zwei Eigenschaften definiert, SheetName und Data. SheetName ist ein einfacher String, der den Namen jedes Excel-Blatts enthält. Data ist eine Liste von Zeichenfolgen-Arrays, um die Daten jeder Zeile im Excel-Blatt zu speichern.
ExcelViewModel
Als Nächstes erstellen wir ExcelViewModel. Dieses Modell ist ein Wrapper, der eine Datei, eine Nachricht und eine Liste von ExcelModel enthält, die Daten aus allen Blättern in der Datei repräsentiert.
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
$vbLabelText $csharpLabel
Diese Klasse wird als Ansichtsmodell verwendet. Es verfügt über eine IFormFile-Eigenschaft für den Dateiupload, einen Message-String zur Anzeige von Nachrichten und eine List<ExcelModel>, um die abgerufenen Excel-Daten zu speichern.
5. Erstellen Sie ExcelController, um Excel-Dateien zum Datenextrahieren zu laden
Erstellen Sie dann einen neuen ExcelController. Hier geschieht die Magie! Die Excel-Dateien werden mit der WorkBook.Load-Funktion von IronXL geladen, durch die Arbeitsblätter iteriert, die Daten extrahiert und zum ExcelViewModel hinzugefügt.
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
$vbLabelText $csharpLabel
Hier initialisieren Sie ein ExcelViewModel und laden dann das WorkBook mit IronXL, durchlaufen jedes WorkSheet, und für jedes WorkSheet erstellen wir ein ExcelModel mit dem Namen und den Daten des Arbeitsblatts. Das ExcelModel wird dann der ExcelData-Liste im ExcelViewModel hinzugefügt.
Die Daten der folgenden Excel-Datei werden geladen und angezeigt:
Die Beispieldatei für Excel
6. Erstellen Sie die Ansicht
Erstellen Sie in Ihrem Views/Excel-Verzeichnis eine neue HTML-Datei Index.cshtml, um Excel-Daten anzuzeigen. Verwenden Sie dann die nav-tabs von Bootstrap, um jedes Blatt in der Excel-Datei darzustellen. Jedes Blatt wird ein separater Tab sein und der Inhalt des Tabs wird die Daten des Blatts sein.
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
$vbLabelText $csharpLabel
In diesem Codebeispiel erzeugt nav nav-tabs eine Liste von Tabs, von denen jeder ein Blatt aus der Excel-Datei darstellt. Der entsprechende Tab-Inhalt zeigt die Daten des jeweiligen Blattes in einem Tabellenformat an. Wenn Sie einige Änderungen vornehmen, wird eine Schaltfläche zum Durchsuchen hinzugefügt, mit der Sie die Excel-Datei manuell auswählen können.
Ausführen des Programms
Nachdem Sie alle Schritte befolgt und das Projekt korrekt eingerichtet haben, ist es an der Zeit, es zu starten. Sie sollten eine Webseite mit Registerkarten sehen, die nach den Blattnamen in Ihrer Excel-Datei benannt sind. Wenn Sie auf eine Registerkarte klicken, werden die Daten des jeweiligen Blattes in einem Tabellenformat angezeigt.
Der Excel-Viewer
Schlussfolgerung
Sie haben gerade einen ASP.NET Excel-Viewer mit IronXL erstellt! Diese leistungsstarke Bibliothek ermöglicht es den Benutzern, mit Excel-Dateien effizienter und übersichtlicher zu arbeiten. Mit Hilfe von IronXL war der Umgang mit Excel-Dateien in der .NET-Umgebung noch nie so einfach.
IronXL bietet eine kostenlose Testversion an, mit der Sie die umfangreiche Funktionalität ohne Vorabkosten erkunden und verstehen können. Sobald Sie es getestet haben und feststellen, dass es die perfekte Lösung für Ihre Bedürfnisse ist, beginnt die Lizenz ab $749.
Regan schloss sein Studium an der University of Reading mit einem BA in Elektrotechnik ab. Bevor er zu Iron Software kam, konzentrierte er sich in seinen früheren Jobs auf einzelne Aufgaben. Was ihm bei Iron Software am meisten Spaß macht, ist das Spektrum der Aufgaben, die er übernehmen kann, sei es im Vertrieb, im technischen Support, in der Produktentwicklung oder im Marketing. Es macht ihm Spaß, die Art und Weise zu verstehen, wie Entwickler die Bibliothek von Iron Software nutzen, und dieses Wissen zu nutzen, um die Dokumentation und die Produkte kontinuierlich zu verbessern.