如何使用 C# 在 Blazor 中讀取 Excel 檔案

Blazor Read Excel File in C# Using IronXL (Example Tutorial)

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

簡介

Blazor 是由微軟所開發的開源 .NET Web 框架。 Blazor 應用程式的運作原理是將 C# 程式碼編譯成符合瀏覽器標準的 JavaScript 和 HTML。 在本教學中,我將分享如何使用 IronXL C# 程式庫,在 Blazor 伺服器端應用程式中讀取 Excel 文件/工作表的最佳且簡易方法。

Demonstration of IronXL Viewing Excel in Blazor

開始使用 IronXL


步驟 1 - 在 Visual Studio 中建立 Blazor 專案

我有一份 XLSX 檔案,其中包含以下資料,我將把這些資料讀入並在 Blazor Server App 中開啟:

輸入 XLSX Excel 試算表 Blazor Server 瀏覽器中的結果
名字 姓氏 ID
John Applesmith 1
Richard 史密斯 2
Sherry Robins 3
Browser View related to 步驟 1 - 在 Visual Studio 中建立 Blazor 專案

首先,請從 Visual Studio 整合開發環境 (IDE) 中建立一個 Blazor 專案:

New Project related to 步驟 1 - 在 Visual Studio 中建立 Blazor 專案

請選擇 Blazor Server App 專案類型:

Choose Blazor Project Type related to 步驟 1 - 在 Visual Studio 中建立 Blazor 專案

請直接使用 F5 金鑰執行應用程式,無需修改解決方案。 請依下述方式導航至應用程式的 Fetch data 標籤頁:

First Run related to 步驟 1 - 在 Visual Studio 中建立 Blazor 專案

我們的目標是透過上傳按鈕將 Excel 檔案載入 Blazor 應用程式,並在該頁面中顯示該檔案。

步驟 2 - 將 IronXL 加入您的解決方案

IronXL:.NET Excel 程式庫(安裝說明):

IronXL 是一個 .NET 程式庫,讓您能將 Microsoft Excel 中的試算表視為物件,使開發人員能夠運用 C# 和 .NET Framework 的全部功能來處理資料流。 身為開發者,我們希望有一種簡便的方法,能將 Excel 文件/試算表中每一列的儲存格與欄位資訊,導入我們的應用程式或資料庫中。

透過 IronXL,您可以從工作表中取得各類資訊,例如儲存格值、儲存格內容、圖片、參照以及格式設定。 IronXL 在許多方面都比 NPOI 更勝一籌。 IronXL 提供更多功能,能讓撰寫複雜邏輯變得更輕鬆。 此外,其授權條款更為優越,且技術支援團隊的專業能力更為出色。

IronXL 支援所有最新版本的 .NET(8、7 及 6)以及 .NET Core Framework 4.6.2 以上版本。

請使用以下任一方法將 IronXL 加入您的解決方案,然後編譯該解決方案。

選項 2A - 使用 NuGet 套件管理員

Install-Package IronXL.Excel

選項 2B - 在 csproj 檔案中新增 PackageReference

您可以透過在解決方案的 .csproj 檔案中,於任何 <ItemGroup> 處加入以下行,將 IronXL 直接加入您的專案:

<PackageReference Include="IronXl.Excel" Version="*" />
<PackageReference Include="IronXl.Excel" Version="*" />
XML

如 Visual Studio 中的示例所示:

Add Ironxl Csproj related to 選項 2B - 在 csproj 檔案中新增 PackageReference

步驟 3 - 實作檔案上傳與檢視功能

在 Visual Studio 的"解決方案檢視"中,前往 Pages/ 資料夾並找到 FetchData.razor 檔案。您可使用任何其他 Razor 檔案,但我們將使用此檔案,因為它隨 Blazor Server App 範本一併提供。

請將檔案內容替換為以下程式碼:

@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.Co/lumns)
            {
                <th>
                    @column.Co/lumnName
                </th>
            }
        </tr>
    </thead>
    <tbody>
        @foreach (DataRow row in displayDataTable.Rows)
        {
            <tr>
                @foreach (DataColumn column in displayDataTable.Co/lumns)
                {
                    <td>
                        @row[column.Co/lumnName].ToString()
                    </td>
                }
            </tr>
        }
    </tbody>
</table>

@code {
    // Create a DataTable instance
    private DataTable displayDataTable = new DataTable();

    // This method is triggered when a file is uploaded
    async Task OpenExcelFileFromDisk(InputFileChangeEventArgs e)
    {
        IronXl.License.LicenseKey = "PASTE TRIAL OR LICENSE KEY";

        // Load the uploaded file into a MemoryStream
        MemoryStream ms = new MemoryStream();

        await e.File.OpenReadStream().CopyToAsync(ms);
        ms.Position = 0;

        // Create an IronXL workbook from the MemoryStream
        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.Co/lumnCount; col++)
        {
            displayDataTable.Co/lumns.Add(headerRow.ElementAt(col).ToString());
        }

        // Populate the DataTable with data from the Excel sheet
        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.Co/lumns)
            {
                <th>
                    @column.Co/lumnName
                </th>
            }
        </tr>
    </thead>
    <tbody>
        @foreach (DataRow row in displayDataTable.Rows)
        {
            <tr>
                @foreach (DataColumn column in displayDataTable.Co/lumns)
                {
                    <td>
                        @row[column.Co/lumnName].ToString()
                    </td>
                }
            </tr>
        }
    </tbody>
</table>

@code {
    // Create a DataTable instance
    private DataTable displayDataTable = new DataTable();

    // This method is triggered when a file is uploaded
    async Task OpenExcelFileFromDisk(InputFileChangeEventArgs e)
    {
        IronXl.License.LicenseKey = "PASTE TRIAL OR LICENSE KEY";

        // Load the uploaded file into a MemoryStream
        MemoryStream ms = new MemoryStream();

        await e.File.OpenReadStream().CopyToAsync(ms);
        ms.Position = 0;

        // Create an IronXL workbook from the MemoryStream
        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.Co/lumnCount; col++)
        {
            displayDataTable.Co/lumns.Add(headerRow.ElementAt(col).ToString());
        }

        // Populate the DataTable with data from the Excel sheet
        for (int row = 1; row < loadedWorkSheet.RowCount; row++)
        {
            IEnumerable<string> excelRow = loadedWorkSheet.GetRow(row).ToArray().Select(c => c.ToString());
            displayDataTable.Rows.Add(excelRow.ToArray());
        }
    }
}
Imports IronXL
Imports System.Data

@page "/fetchdata"

<PageTitle>Excel File Viewer</PageTitle>

<h1>Open Excel File to View</h1>

<InputFile OnChange="@OpenExcelFileFromDisk" />

<table>
    <thead>
        <tr>
            @For Each column As DataColumn In displayDataTable.Columns
                <th>
                    @column.ColumnName
                </th>
            Next
        </tr>
    </thead>
    <tbody>
        @For Each row As DataRow In displayDataTable.Rows
            <tr>
                @For Each column As DataColumn In displayDataTable.Columns
                    <td>
                        @row(column.ColumnName).ToString()
                    </td>
                Next
            </tr>
        Next
    </tbody>
</table>

@code {
    ' Create a DataTable instance
    Private displayDataTable As New DataTable()

    ' This method is triggered when a file is uploaded
    Private Async Function OpenExcelFileFromDisk(e As InputFileChangeEventArgs) As Task
        IronXl.License.LicenseKey = "PASTE TRIAL OR LICENSE KEY"

        ' Load the uploaded file into a MemoryStream
        Dim ms As New MemoryStream()

        Await e.File.OpenReadStream().CopyToAsync(ms)
        ms.Position = 0

        ' Create an IronXL workbook from the MemoryStream
        Dim loadedWorkBook As WorkBook = WorkBook.FromStream(ms)
        Dim loadedWorkSheet As WorkSheet = loadedWorkBook.DefaultWorkSheet ' Or use .GetWorkSheet()

        ' Add header Columns to the DataTable
        Dim headerRow As RangeRow = loadedWorkSheet.GetRow(0)
        For col As Integer = 0 To loadedWorkSheet.ColumnCount - 1
            displayDataTable.Columns.Add(headerRow.ElementAt(col).ToString())
        Next

        ' Populate the DataTable with data from the Excel sheet
        For row As Integer = 1 To loadedWorkSheet.RowCount - 1
            Dim excelRow As IEnumerable(Of String) = loadedWorkSheet.GetRow(row).ToArray().Select(Function(c) c.ToString())
            displayDataTable.Rows.Add(excelRow.ToArray())
        Next
    End Function
}
$vbLabelText   $csharpLabel

摘要

<InputFile> 元件可讓您在此網頁上傳檔案。 我們已將觸發的事件回呼設定為呼叫 OpenExcelFileFromDisk,此為底部 @code 區塊中的非同步方法。 HTML 會將您的 Excel 試算表渲染為標籤頁上的表格。

IronXl.Excel 是一個獨立的 .NET 軟體程式庫,用於讀取多種電子表格格式。 無需安裝 Microsoft Excel,且不依賴 Interop。


延伸閱讀

Documentation related to 延伸閱讀

查看 API 參考

請參閱 IronXL 的 API 參考文件,其中詳述了 IronXL 所有功能、命名空間、類別、方法、欄位及枚舉的詳細資訊。

查看 API 參考

下載該軟體產品。

常見問題

如何在 Blazor 伺服器端應用程式中讀取 Excel 檔案?

若要在 Blazor 伺服器端應用程式中讀取 Excel 檔案,您可以使用 IronXL C# 程式庫。透過 NuGet 套件管理員安裝此程式庫,並實作讀取及顯示 Excel 資料的程式碼,即可輕鬆將其整合至您的 Blazor 專案中。

建立 Blazor 專案以讀取 Excel 檔案的步驟為何?

首先,透過 NuGet 套件管理員安裝 IronXL。接著,在您的 Blazor 應用程式中建立一個檔案上傳按鈕。使用 IronXL 讀取上傳的 Excel 檔案,並設定應用程式透過 Razor 元件以表格形式顯示資料。

在未安裝 Excel 的情況下,是否可以在 Blazor 應用程式中讀取 Excel 檔案?

是的,透過 IronXL,您可以在 Blazor 應用程式中讀取和處理 Excel 檔案,而無需在系統上安裝 Microsoft Excel。

如何在 Blazor 應用程式中顯示 Excel 資料?

使用 IronXL 讀取 Excel 檔案後,您可以在 Blazor 應用程式中使用 Razor 元件,將資料以表格格式呈現,從而提升使用者介面體驗。

IronXL 相較於其他 Excel 程式庫有哪些優勢?

IronXL 提供豐富的功能、輕鬆處理複雜邏輯的能力、優越的授權條款以及專屬技術支援,使其相較於 NPOI 等替代方案更為理想。

IronXL 支援哪些 .NET 版本來進行 Excel 操作?

IronXL 支援所有最新版本的 .NET(包括 8、7 和 6),以及 .NET Core Framework 4.6.2 以上版本,確保與現代應用程式廣泛相容。

如何將 Excel 函式庫整合到我的 Blazor 專案中?

您可以透過 NuGet 套件管理員執行命令 `dotnet add package IronXL.Excel`,或在 .csproj 檔案中新增 PackageReference,將 IronXL 程式庫整合至您的 Blazor 專案中。

若我的 Blazor 應用程式無法讀取 Excel 檔案,該採取哪些疑難排解步驟?

請確認已透過 NuGet 正確安裝 IronXL,且您的 Blazor 應用程式具備從磁碟讀取檔案所需的權限。請再次確認 Excel 檔案路徑正確無誤,且該檔案格式為 IronXL 所支援。

Curtis Chau
技術撰稿人

Curtis Chau 擁有卡爾頓大學(Carleton University)的電腦科學學士學位,專精於前端開發,並精通 Node.js、TypeScript、JavaScript 及 React。他熱衷於打造直觀且美觀的用戶介面,喜歡運用現代框架,並創建結構完善、視覺上吸引人的手冊。

除了開發工作之外,Curtis 對物聯網(IoT)抱有濃厚興趣,致力於探索整合硬體與軟體的創新方法。閒暇時,他喜歡玩遊戲和開發 Discord 機器人,將對科技的熱愛與創意相結合。

準備開始了嗎?
Nuget 下載 2,052,917 | 版本: 2026.6 just released
Still Scrolling Icon

還在捲動嗎?

想要快速證明? PM > Install-Package IronXL.Excel
執行範例 觀看您的資料變成試算表。