Blazor 使用 IronXL 在 C# 中读取 Excel 文件(示例教程)
简介
Blazor 是微软公司开发的一个开源 .NET Web 框架。Blazor 应用程序通过将 C# 代码编译成浏览器兼容的 JavaScript 和 HTML 来运行。在本教程中,我将与大家分享在 Blazor 服务器端应用程序中使用 IronXL C# 库读取 Excel 文档/工作表的最佳简便方法。
如何在 Blazor 中读取 Excel 文件
- 安装 C# 库以在 Blazor 中读取 Excel 文件
- 在 Blazor 应用程序上创建文件上传按钮
- 使用 C# 库从磁盘读取 Excel 文件
- 配置 Blazor 应用程序,在窗口的表格中显示读取的数据
第 1 步 - 在 Visual Studio 中创建 Blazor 项目
我有一个 XLSX 文件,其中包含以下数据,我将在 Blazor 服务器应用程序中读取并打开这些数据:
输入 XLSX Excel 工作表 | 在 Blazor 服务器浏览器中的结果 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
首先从 Visual Studio IDE 创建一个 Blazor 项目:
选择 Blazor Server App
项目类型:
按 F5
键运行应用程序,但不更改解决方案。像这样导航到应用程序的 "获取数据 "选项卡:
我们的目标是通过上传按钮将 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 包管理器
开始在您的项目中使用IronPDF,并立即获取免费试用。
查看 IronXL 上 Nuget 用于快速安装和部署。它有超过800万次下载,正在使用C#改变Excel。
Install-Package IronXL.Excel
考虑安装 IronXL DLL 直接。下载并手动安装到您的项目或GAC表单中: IronXL.zip
手动安装到你的项目中
下载DLL选项 2B - 在 csproj 文件中添加 PackageReference
您可以直接将 IronXL 添加到您的项目中,方法是在任何 中添加以下行<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());
' }
' }
'}
摘要
的 <InputFile>组件将允许您在该网页上上传文件。我们已将调用的事件回调设置为调用
OpenExcelFileFromDisk,这是底部
@code` 块中的异步方法。HTML 将在标签页上以表格形式呈现 Excel 表。
IronXL.Excel 是一个单独的 .NET 软件库,用于读取各种电子表格格式。它不需要 微软Excel 安装,而不依赖于 Interop。
更多阅读
*下载 软件产品。