如何在 C# 中使用 IronXL 在 Blazor 中讀取 Excel 文件

使用 IronXL 在 C# 中讀取 Blazor Excel 檔案(範例教學)

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 伺服器應用程式中開啟:

輸入 XLSX Excel 表格 Blazor 伺服器瀏覽器中的結果
名字 姓氏 ID
約翰 蘋果匠 1
理查 史密斯 2
雪莉酒 知更鳥 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

您可以透過在任何專案中新增以下程式碼行,將 IronXL 直接新增到您的專案中。<ItemGroup>在解決方案的.csproj檔案中:

<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 伺服器應用程式模板一起提供。

將文件內容替換為以下程式碼:

@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 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.ColumnCount; col++)
        {
            displayDataTable.Columns.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.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 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.ColumnCount; col++)
        {
            displayDataTable.Columns.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());
        }
    }
}
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 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.ColumnCount; col++)
'		{
'			displayDataTable.Columns.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());
'		}
'	}
'}
$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,您可以在未安裝 Microsoft Excel 的情況下在 Blazor 應用程式中讀取和操作 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 這樣的 Excel 庫集成到您的 Blazor 項目中。

如果我的 Blazor 應用程式無法讀取 Excel 檔案,我可以採取哪些故障排除步驟?

確保 IronXL 已正確通過 NuGet 安裝,並且您的 Blazor 應用程式具有從磁碟讀取文件的必要權限。再次檢查 Excel 文件路徑是否正確,並確保文件格式受到 IronXL 的支持。

Curtis Chau
技術撰稿人

Curtis Chau 擁有電腦科學學士學位(卡爾頓大學),專長於前端開發,精通 Node.js、TypeScript、JavaScript 和 React。Curtis 對製作直覺且美觀的使用者介面充滿熱情,他喜歡使用現代化的架構,並製作結構良好且視覺上吸引人的手冊。

除了開發之外,Curtis 對物聯網 (IoT) 也有濃厚的興趣,他喜歡探索整合硬體與軟體的創新方式。在空閒時間,他喜歡玩遊戲和建立 Discord bots,將他對技術的熱愛與創意結合。

準備好開始了嗎?
Nuget 下載 1,846,091 | 版本: 2026.2 剛剛發布