Blazor 使用 IronXL 在 C# 中读取 Excel 文件(示例教程)
介绍
Blazor 是由微软创建的开源 .NET Web 框架。 Blazor 应用程序通过将 C# 代码编译成符合浏览器的 JavaScript 和 HTML 来工作。 在此教程中,我将分享使用IronXL C#库在Blazor服务器端应用程序中读取Excel文档/工作表的最佳和简便方法。
如何在 Blazor 中读取 Excel 文件
- 安装 C# 库以在 Blazor 中读取 Excel 文件
- 在 Blazor 应用程序上创建文件上传按钮
- 使用 C# 库从磁盘读取 Excel 文件
- 配置 Blazor 应用程序,在窗口的表格中显示读取的数据
开始使用IronXL
立即在您的项目中开始使用IronXL,并享受免费试用。
步骤1 - 在Visual Studio中创建一个Blazor项目.
我有一个包含以下数据的XLSX文件,我将在Blazor服务器应用中读取并打开这个文件:
输入 XLSX Excel 工作表 | 在 Blazor 服务器浏览器中的结果 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
首先从 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 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.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。
更多阅读
*下载软件产品。