使用 IronXL 在 C# 中閱讀 Blazor Excel 文件(範例教程)
介紹
Blazor 是一個由 Microsoft 創建的開源 .NET Web 框架。 Blazor 應用程式的運作原理是將 C# 程式碼編譯成符合瀏覽器規範的 JavaScript 和 HTML。 在本教程中,我將分享使用 IronXL C# 程式庫在 Blazor 服務端應用程序中讀取 Excel 文檔/工作表的最佳和簡便方法。
如何在Blazor中讀取Excel檔案
- 在Blazor中安裝C#庫以讀取Excel文件
- 在您的Blazor應用程式上創建文件上傳按鈕
- 使用 C# 庫從磁碟讀取 Excel 文件
- 將 Blazor 應用程式配置為在視窗上的表格中顯示讀取的數據
開始使用IronXL
立即在您的專案中使用IronXL,並享受免費試用。
步驟 1 - 在 Visual Studio 中創建一個 Blazor 專案
我有一個包含以下數據的XLSX文件,我將在Blazor伺服器應用程式中讀取並打開它:
輸入 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 Framework 的全部功能來操控數據流。 作為開發者,我們希望有一個好方法,可以將 Excel 文件/工作表中的每一行單元格和列信息獲取到我們的應用程序或數據庫中。
使用 IronXL,您可以從工作表中獲取各種資訊,例如單元格值、單元格內容、圖像、參考和格式設定。 IronXL 在許多方面比 NPOI 好。 IronXL 提供更多功能,並且可以讓編寫複雜邏輯變得更容易。 它也擁有更受歡迎的許可證,並且支援團隊更加有能力。
IronXL 支援所有最新版本的 .NET(8, 7, 和 6)和 .NET Core 框架 4.6.2+。
將 IronXL 以下列其中一種方法加入您的解決方案,然後構建解決方案。
選項 2A - 使用 NuGet 包管理器
Install-Package IronXL.Excel
選項 2B - 在 csproj 檔案中添加 PackageReference
您可以通過在任何 <ItemGroup>在您的解決方案的
.csproj` 檔案中:
<PackageReference Include="IronXL.Excel" Version="*" />
如在 Visual Studio 中所示:
第3步 - 編寫文件上傳和查看代码
在 Visual Studio 解決方案視圖中,轉到 Pages/
文件夾並找到 FetchData.razor
文件。您可以使用任何其他 razor 文件,但我們將使用這個,因為它隨 Blazor Server 應用模板一起提供。
將文件替換內容為以下代碼:
@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>該組件將允許您在此網頁上上傳檔案。 我们已设置调用的事件回调以调用位于底部
@code块中的异步方法
OpenExcelFileFromDisk`。 HTML 將會在標籤上將您的 Excel 工作表渲染為表格。
IronXL.Excel 是一個專門用於讀取各種電子表格格式的 .NET 軟體庫。 它不需要微軟 Excel安裝,並且不依賴於Interop。
進一步閱讀
*下載該軟體產品。