Blazor Lesen von Excel-Dateien in C# mit IronXL (Beispiel-Tutorial)

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

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.

Demonstration der IronXL-Ansicht von Excel in Blazor

Legen Sie los mit IronXL

Beginnen Sie noch heute mit der Verwendung von IronXL in Ihrem Projekt mit einer kostenlosen Testversion.

Erster Schritt:
green arrow pointer


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 eingebenErgebnis im Blazor Server Browser
VornamenNachnameID
JohnApplesmith
RichardSmith
SherryRobins
Browser View related to Schritt 1 - Erstellen eines Blazor-Projekts in Visual Studio

Beginnen Sie mit der Erstellung eines Blazor-Projekts in der Visual Studio IDE:

New Project related to Schritt 1 - Erstellen eines Blazor-Projekts in Visual Studio

Wählen Sie den Projekttyp Blazor Server App:

Choose Blazor Project Type related to Schritt 1 - Erstellen eines Blazor-Projekts in Visual Studio

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:

First Run related to Schritt 1 - Erstellen eines Blazor-Projekts in Visual Studio

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="*" />
XML

Wie hier in Visual Studio gezeigt:

Add Ironxl Csproj related to Option 2B - PackageReference in der csproj-Datei hinzufügen

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());
'		}
'	}
'}
VB   C#

Zusammenfassung

Die <InputFile>komponente ermöglicht es Ihnen, eine Datei auf diese Webseite hochzuladen. Und wir haben den aufgerufenen Ereignis-Callback so eingestellt, dass erOpenExcelFileFromDiskaufruft, 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

Documentation related to 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-Referenz

Herunterladen das Softwareprodukt.