使用 IronXL 在 C# 中閱讀 Blazor Excel 文件(範例教程)
介紹
Blazor 是由微軟創建的開源 .NET 網頁框架。Blazor 應用程序通過將 C# 代碼編譯成符合瀏覽器的 JavaScript 和 HTML 來工作。在本教程中,我將分享使用 IronXL C# 庫在 Blazor 伺服端應用程式中讀取 Excel 文檔/工作表的最佳且簡便的方法。
如何在Blazor中讀取Excel檔案
- 在Blazor中安裝C#庫以讀取Excel文件
- 在您的Blazor應用程式上創建文件上傳按鈕
- 使用 C# 庫從磁碟讀取 Excel 文件
- 將 Blazor 應用程式配置為在視窗上的表格中顯示讀取的數據
步驟1 - 在 Visual Studio 中建立 Blazor 專案
我有一個包含以下數據的 XLSX 檔案,我將在 Blazor Server 應用程式中讀取並開啟:
輸入 XLSX Excel 工作表 | 在 Blazor Server Browser 中的結果 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
首先從 Visual Studio IDE 建立一個 Blazor 專案:
選擇 Blazor Server App
專案類型:
請繼續使用 F5
鍵運行應用程序而不更改解決方案。像這樣導航到應用程序的 Fetch data
標籤:
我們的目標是將 Excel 文件通過上傳按鈕加載到 Blazor 應用中,然後在此頁面顯示。
步驟 2 - 將 IronXL 添加到您的解決方案中
IronXL: .NET Excel 函式庫 (安裝說明)IronXL 是一個 .NET 函式庫,允許您將 Microsoft Excel 的電子表格視為一個對象,讓開發者能夠使用 C# 和 .NET 框架的全部功能來操作數據流。我們作為開發者,希望能有一個便捷的方法,通過該方法可以將 Excel 文件/工作表中的每一行單元格和欄位資訊導入到我們的應用程式或資料庫中。
使用 IronXL,可以從工作表中獲取各種資訊,如單元格值、單元格內容、圖片、引用和格式。IronXL 在許多方面優於 NPOI。IronXL 提供了更多功能,使編寫複雜邏輯更加簡單。它還有更優惠的許可證,並且支援團隊更為專業。
IronXL 支持所有最新版本的 .NET (8, 7, 和 6) 和 .NET Core Framework 4.6.2+ 。
使用以下方法之一將 IronXL 添加到您的方案中,然後構建該方案。
選項2A - 使用 NuGet 套件管理器
立即開始在您的專案中使用IronPDF,並享受免費試用。
查看 IronXL 上 Nuget 快速安裝和部署。已被下載超過800萬次,它正用C#改變Excel。
Install-Package IronXL.Excel
請考慮安裝 IronXL DLL 直接下載並手動安裝到您的專案或GAC表單: IronXL.zip
手動安裝到您的項目中
下載DLL選項 2B - 在 csproj 文件中添加 PackageReference
您可以通過在任何 <ItemGroup>在您的解決方案的
.csproj` 檔案中:
<PackageReference Include="IronXL.Excel" Version="*" />
如在 Visual Studio 中所示:
步驟 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
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());
' }
' }
'}
摘要
The <InputFile>
component 將允許您在此網頁上上傳檔案。我們已設置調用事件回調以調用 OpenExcelFileFromDisk
,這是在 @code
區塊底部的異步方法。HTML 將渲染您的 Excel 表格為選項卡上的表格。
IronXL.Excel 是唯一的 .NET 軟件庫,用於讀取各種電子表格格式。它不需要 微軟 Excel 安裝,並且不依賴於Interop。
進一步閱讀
*下載 該軟體產品。