使用IronXL在C#中读取Excel文件的Blazor教程示例

查克尼特·宾
查克尼特·宾
2018年八月28日
更新 2024年十二月10日
分享:
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文档/工作表的最佳和简便方法。

在 Blazor 中查看 Excel 的 IronXL 演示

开始使用IronXL

立即在您的项目中开始使用IronXL,并享受免费试用。

第一步:
green arrow pointer


步骤1 - 在Visual Studio中创建一个Blazor项目.

我有一个包含以下数据的XLSX文件,我将在Blazor服务器应用中读取并打开这个文件:

Input XLSX Excel SheetResult in Blazor Server Browser
First nameLast nameID
JohnApplesmith1
RichardSmith2
SherryRobins3
Browser View related to 步骤1 - 在Visual Studio中创建一个Blazor项目.

首先从 Visual Studio IDE 创建一个 Blazor 项目:

New Project related to 步骤1 - 在Visual Studio中创建一个Blazor项目.

选择Blazor服务器应用程序项目类型:

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

您可以通过在解决方案的.csproj文件中的任何<ItemGroup>中添加以下行,将IronXL直接添加到您的项目中:

<PackageReference Include="IronXL.Excel" Version="*" />
XML

如这里的 Visual Studio 所示:

Add Ironxl Csproj related to 选项 2B - 在 csproj 文件中添加 PackageReference

步骤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());
'		}
'	}
'}
$vbLabelText   $csharpLabel

摘要

<InputFile>组件将允许您在此网页上上传文件。 我们已经将调用事件的回调设置为调用OpenExcelFileFromDisk,这是底部@code块中的异步方法。 HTML 将在标签页上将您的 Excel 工作表渲染为表格。

IronXL.Excel 是唯一的 .NET 软件库,用于读取各种各样的电子表格格式。 它不需要安装Microsoft Excel,并且不依赖于Interop。


更多阅读

Documentation related to 更多阅读

查看应用程序接口参考

探索 IronXL 的 API 参考,其中概述了 IronXL 的所有功能、命名空间、类、方法字段和枚举的详细信息。

查看应用程序接口参考

下载软件产品。

查克尼特·宾
软件工程师
Chaknith 负责 IronXL 和 IronBarcode 的工作。他在 C# 和 .NET 方面拥有深厚的专业知识,帮助改进软件并支持客户。他从用户互动中获得的洞察力,有助于提升产品、文档和整体体验。