Blazor Lesen von Excel-Dateien in C# mit IronXL (Beispiel-Tutorial)
Einführung
Blazor ist ein quelloffenes .NET-Web-Framework, das von Microsoft entwickelt wurde. Eine Blazor-Anwendung funktioniert durch Kompilieren des C#-Codes in Browser-kompatibles JavaScript und HTML. In diesem Tutorial teile ich mein Wissen über die beste und einfachste Methode zum Lesen von Excel-Dokumenten/Arbeitsblättern in einer serverseitigen Blazor-Anwendung unter Verwendung der IronXL C#-Bibliothek.
Wie man Excel-Dateien in Blazor liest
- C#-Bibliothek zum Lesen von Excel-Dateien in Blazor installieren
- Erstellen Sie eine Schaltfläche zum Hochladen von Dateien in Ihrer Blazor-Anwendung
- C#-Bibliothek zum Lesen von Excel-Dateien von der Festplatte verwenden
- Konfigurieren Sie die Blazor-App so, dass die gelesenen Daten in einer Tabelle im Fenster angezeigt werden
Legen Sie los mit IronXL
Beginnen Sie noch heute mit der Verwendung von IronXL in Ihrem Projekt mit einer kostenlosen Testversion.
Schritt 1 - Erstellen eines Blazor-Projekts in Visual Studio
Ich habe eine XLSX-Datei mit den folgenden Daten, die ich einlesen und in der Blazor Server App öffnen möchte:
XLSX-Excel-Tabelle eingeben | Ergebnis im Blazor Server Browser | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Beginnen Sie mit der Erstellung eines Blazor-Projekts in der Visual Studio IDE:
Wählen Sie den Projekttyp Blazor Server App
:
Führen Sie die Anwendung aus, ohne die Lösung zu ändern, und drücken Sie die Taste "F5". Navigieren Sie zur Registerkarte "Daten abrufen" der Anwendung wie folgt:
Unser Ziel ist es, die Excel-Datei mit einer Upload-Schaltfläche in die Blazor-App zu laden und sie dann auf dieser Seite anzuzeigen.
Schritt 2 - IronXL zu Ihrer Lösung hinzufügen
IronXL: .NET Excel-Bibliothek(Installationsanleitung):
IronXL ist eine .NET-Bibliothek, die es Ihnen ermöglicht, die Kalkulationstabelle in Microsoft Excel wie ein Objekt zu behandeln, so dass der Entwickler die volle Leistungsfähigkeit von C# und dem .NET-Framework nutzen kann, um den Datenstrom zu manipulieren. Als Entwickler wünschen wir uns eine Möglichkeit, mit der wir alle Zeilenzellen und Spalteninformationen aus Excel-Dokumenten/Arbeitsblättern in unsere Anwendungen oder Datenbanken übernehmen können.
Mit IronXL ist es möglich, alle Arten von Informationen aus einem Arbeitsblatt abzurufen, z. B. Zellwerte, Zellinhalte, Bilder, Referenzen und Formatierungen. IronXL ist in vielerlei Hinsicht besser als NPOI. IronXL bietet mehr Funktionen und kann das Schreiben komplexer Logik vereinfachen. Außerdem gibt es günstigere Lizenzen und das Support-Team ist kompetenter.
IronXL unterstützt alle aktuellen Versionen von .NET(8, 7, und 6) und .NET Core Framework 4.6.2+.
Fügen Sie IronXL mit einer der unten aufgeführten Methoden zu Ihrer Lösung hinzu und erstellen Sie die Lösung.
Option 2A - NuGet-Paketmanager verwenden
Install-Package IronXL.Excel
Option 2B - PackageReference in der csproj-Datei hinzufügen
Sie können IronXL direkt zu Ihrem Projekt hinzufügen, indem Sie die folgende Zeile zu jedem <ItemGroup>in der Datei
.csproj` Ihrer Lösung:
<PackageReference Include="IronXL.Excel" Version="*" />
Wie hier in Visual Studio gezeigt:
Schritt 3 - Codierung des Dateiuploads und der Ansicht
Gehen Sie in der Visual Studio Solution View zum Ordner "Pages/" und suchen Sie die Datei "FetchData.razor". Sie können jede andere Razor-Datei verwenden, aber wir werden diese verwenden, weil sie mit dem Blazor Server App Template geliefert wird.
Ersetzen Sie den Inhalt der Datei replace durch den folgenden Code:
@using IronXL;
@using System.Data;
@page "/fetchdata"
<PageTitle>Excel File Viewer</PageTitle>
<h1>Open Excel File to View</h1>
<InputFile OnChange="@OpenExcelFileFromDisk" />
<table>
<thead>
<tr>
@foreach (DataColumn column in displayDataTable.Columns)
{
<th>
@column.ColumnName
</th>
}
</tr>
</thead>
<tbody>
@foreach (DataRow row in displayDataTable.Rows)
{
<tr>
@foreach (DataColumn column in displayDataTable.Columns)
{
<td>
@row [column.ColumnName].ToString()
</td>
}
</tr>
}
</tbody>
</table>
@code {
// Create a DataTable
private DataTable displayDataTable = new DataTable();
// When a file is uploaded to the App using the InputFile, trigger:
async Task OpenExcelFileFromDisk(InputFileChangeEventArgs e)
{
IronXL.License.LicenseKey = "PASTE TRIAL OR LICENSE KEY";
// Open the File to a MemoryStream object
MemoryStream ms = new MemoryStream();
await e.File.OpenReadStream().CopyToAsync(ms);
ms.Position = 0;
// Define variables for IronXL
WorkBook loadedWorkBook = WorkBook.FromStream(ms);
WorkSheet loadedWorkSheet = loadedWorkBook.DefaultWorkSheet; // Or use .GetWorkSheet()
// Add header Columns to the DataTable
RangeRow headerRow = loadedWorkSheet.GetRow(0);
for (int col = 0 ; col < loadedWorkSheet.ColumnCount ; col++)
{
displayDataTable.Columns.Add(headerRow.ElementAt(col).ToString());
}
// Populate the DataTable
for (int row = 1 ; row < loadedWorkSheet.RowCount ; row++)
{
IEnumerable<string> excelRow = loadedWorkSheet.GetRow(row).ToArray().Select(c => c.ToString());
displayDataTable.Rows.Add(excelRow.ToArray());
}
}
}
@using IronXL;
@using System.Data;
@page "/fetchdata"
<PageTitle>Excel File Viewer</PageTitle>
<h1>Open Excel File to View</h1>
<InputFile OnChange="@OpenExcelFileFromDisk" />
<table>
<thead>
<tr>
@foreach (DataColumn column in displayDataTable.Columns)
{
<th>
@column.ColumnName
</th>
}
</tr>
</thead>
<tbody>
@foreach (DataRow row in displayDataTable.Rows)
{
<tr>
@foreach (DataColumn column in displayDataTable.Columns)
{
<td>
@row [column.ColumnName].ToString()
</td>
}
</tr>
}
</tbody>
</table>
@code {
// Create a DataTable
private DataTable displayDataTable = new DataTable();
// When a file is uploaded to the App using the InputFile, trigger:
async Task OpenExcelFileFromDisk(InputFileChangeEventArgs e)
{
IronXL.License.LicenseKey = "PASTE TRIAL OR LICENSE KEY";
// Open the File to a MemoryStream object
MemoryStream ms = new MemoryStream();
await e.File.OpenReadStream().CopyToAsync(ms);
ms.Position = 0;
// Define variables for IronXL
WorkBook loadedWorkBook = WorkBook.FromStream(ms);
WorkSheet loadedWorkSheet = loadedWorkBook.DefaultWorkSheet; // Or use .GetWorkSheet()
// Add header Columns to the DataTable
RangeRow headerRow = loadedWorkSheet.GetRow(0);
for (int col = 0 ; col < loadedWorkSheet.ColumnCount ; col++)
{
displayDataTable.Columns.Add(headerRow.ElementAt(col).ToString());
}
// Populate the DataTable
for (int row = 1 ; row < loadedWorkSheet.RowCount ; row++)
{
IEnumerable<string> excelRow = loadedWorkSheet.GetRow(row).ToArray().Select(c => c.ToString());
displayDataTable.Rows.Add(excelRow.ToArray());
}
}
}
Private IronXL As [using]
Private System As [using]
'INSTANT VB TODO TASK: Local functions are not converted by Instant VB:
'@page "/fetchdata" (Of PageTitle) Excel File Viewer</PageTitle> (Of h1) Open Excel File @to View</h1> <InputFile OnChange="@OpenExcelFileFromDisk" /> (Of table) (Of thead) (Of tr) @foreach(DataColumn column in displayDataTable.Columns)
' {
' <th> @column.ColumnName </th>
' }
'INSTANT VB TODO TASK: Local functions are not converted by Instant VB:
' </tr> </thead> (Of tbody) @foreach(DataRow row in displayDataTable.Rows)
' {
' <tr> @foreach(DataColumn column in displayDataTable.Columns)
' {
' <td> @row [column.ColumnName].ToString() </td>
' }
' </tr>
' }
'INSTANT VB TODO TASK: Local functions are not converted by Instant VB:
' </tbody> </table> @code
' {
' ' Create a DataTable
' private DataTable displayDataTable = New DataTable();
'
' ' When a file is uploaded to the App using the InputFile, trigger:
' async Task OpenExcelFileFromDisk(InputFileChangeEventArgs e)
' {
' IronXL.License.LicenseKey = "PASTE TRIAL OR LICENSE KEY";
'
' ' Open the File to a MemoryStream object
' MemoryStream ms = New MemoryStream();
'
' await e.File.OpenReadStream().CopyToAsync(ms);
' ms.Position = 0;
'
' ' Define variables for IronXL
' WorkBook loadedWorkBook = WorkBook.FromStream(ms);
' WorkSheet loadedWorkSheet = loadedWorkBook.DefaultWorkSheet; ' Or use .GetWorkSheet()
'
' ' Add header Columns to the DataTable
' RangeRow headerRow = loadedWorkSheet.GetRow(0);
' for (int col = 0 ; col < loadedWorkSheet.ColumnCount ; col++)
' {
' displayDataTable.Columns.Add(headerRow.ElementAt(col).ToString());
' }
'
' ' Populate the DataTable
' for (int row = 1 ; row < loadedWorkSheet.RowCount ; row++)
' {
' IEnumerable<string> excelRow = loadedWorkSheet.GetRow(row).ToArray().@Select(c => c.ToString());
' displayDataTable.Rows.Add(excelRow.ToArray());
' }
' }
'}
Zusammenfassung
Die <InputFile>komponente ermöglicht es Ihnen, eine Datei auf diese Webseite hochzuladen. Und wir haben den aufgerufenen Ereignis-Callback so eingestellt, dass er
OpenExcelFileFromDiskaufruft, die asynchrone Methode im
@code`-Block unten. Das HTML wird Ihr Excel-Blatt als Tabelle auf der Registerkarte darstellen.
IronXL.Excel ist eine reine .NET-Softwarebibliothek zum Lesen einer Vielzahl von Tabellenkalkulationsformaten. Es ist nicht erforderlichMicrosoft Excel installiert werden muss und nicht von Interop abhängig ist.
Weitere Lektüre
Ansicht der API-Referenz
Entdecken Sie die API-Referenz für IronXL, die Details zu allen Funktionen, Namespaces, Klassen, Methoden, Feldern und Enums von IronXL enthält.
Ansicht der API-ReferenzHerunterladen das Softwareprodukt.