跳至页脚内容
使用 IRONXL

如何在 ASP .NET Core 中打开 Excel 文件

本教程将演示如何在 ASP.NET Core 应用程序中使用 IronXL 打开 Excel 文件。 它将涵盖读取 Excel 文件的基本步骤,然后显示其中的数据,并将修改后的数据保存回文件。

什么是 IronXL?

IronXL 是一个 .NET Excel 库,提供了处理 Excel 文档的功能,无需依赖于 Microsoft Excel 或 Office Interop。 它支持 .NET Framework 和 .NET Core,能够通过几行代码来编写、操作和读取 Excel 文件。 有关读取 Excel 文件的详细教程,请参阅此 Excel 教程

IronXL library can read and write Excel documents, extract data from them, manipulate the data, and even create new Excel files from scratch. IronXL 不仅支持 .XLS 格式,还兼容 .XLSX,这是 Microsoft 开发的基于 XML 的电子表格文件格式。

准备工作

在进入代码之前,请确保您已经具备以下条件:

  1. 安装 .NET Core 3.1 或更高版本。
  2. 一个适用于 .NET 开发的合适 IDE(推荐使用 Microsoft Visual Studio)。
  3. 对 ASP.NET Core 和 Razor Pages 的基本理解。

创建一个新的 .NET Core 项目

  1. 打开 Microsoft Visual Studio 并选择“创建新项目”。
  2. 从项目模板列表中选择“ASP.NET Core Web 应用程序”并点击“下一步”。
  3. 为您的项目提供名称,例如“Open_ExcelFile.NET_Core”,选择位置,并点击“下一步”。
  4. 选择“.NET Core”作为目标框架,并选择“ASP.NET Core 3.1 或更高版本”作为版本。 在“项目模板”部分,选择“Web 应用程序”并点击“创建”。

安装 IronXL 包

接下来的步骤是在刚创建的项目中安装 IronXL 包:

  1. 在解决方案资源管理器中右键点击项目并选择“管理 NuGet 包”。
  2. 在“浏览”选项卡中,搜索“IronXL”并点击IronXL.Excel 包的“安装”。

如何在 ASP .NET Core 中打开 Excel 文件,图 1:在 NuGet 包管理器 UI 中搜索并安装 IronXL 包 在 NuGet 包管理器 UI 中搜索并安装 IronXL 包

  1. 等待包安装完成。

您的 ASP.NET Core 项目现在已设置完成,IronXL 库已安装并可以使用。

创建 Razor 页面

现在,让我们创建一个 Razor 页面来编写打开 Excel 文件的代码。

  1. 在解决方案资源管理器的“Pages”文件夹上右键单击并选择“添加” > “Razor 页面”。
  2. 输入“ExcelOpener”作为页面名称并点击“添加”。

如何在 ASP .NET Core 中打开 Excel 文件,图 2:创建一个新的 Razor 页面 创建一个新的 Razor 页面

这将创建两个文件:ExcelOpener.cshtmlExcelOpener.cshtml.cs

ExcelOpener.cshtml 文件包含页面的 HTML 标记,而 ExcelOpener.cshtml.cs 文件包含页面的 C# 后台代码。

读取 Excel 文件

让我们深入到代码中。 提供的 ExcelOpenerModel 类是一个 Razor 页面模型。 此类有一个 List<List<string>> 属性 Data,将用于存储从 Excel 文件中读取的数据。

public List<List<string>> Data { get; set; }

public ExcelOpenerModel()
{
    Data = new List<List<string>>();
}
public List<List<string>> Data { get; set; }

public ExcelOpenerModel()
{
    Data = new List<List<string>>();
}
Public Property Data() As List(Of List(Of String))

'INSTANT VB WARNING: The following constructor is declared outside of its associated class:
'ORIGINAL LINE: public ExcelOpenerModel()
Public Sub New()
	Data = New List(Of List(Of String))()
End Sub
$vbLabelText   $csharpLabel

OnGet 方法中,使用 IronXL 加载一个 Excel 文件并从默认工作表(工作簿中的第一张表)读取数据。 每行表示为一个 List<string>,所有这些列表然后添加到 Data 属性中。

public void OnGet()
{
    try
    {
        Data = new List<List<string>>();
        // Load your Excel file
        var workbook = WorkBook.Load(@"C:\Users\Administrator\Documents\Loan.xlsx");

        // Select your Worksheet
        WorkSheet sheet = workbook.DefaultWorkSheet;

        for (int i = 0; i < sheet.RowCount; i++)
        {
            var row = new List<string>();
            for (int j = 0; j < sheet.ColumnCount; j++)
            {
                row.Add(sheet.GetCellAt(i, j).Value.ToString());
            }
            Data.Add(row);
        }
    }
    catch (Exception ex)
    {
        // Handle exceptions here
        Console.WriteLine(ex.Message);
    }
}
public void OnGet()
{
    try
    {
        Data = new List<List<string>>();
        // Load your Excel file
        var workbook = WorkBook.Load(@"C:\Users\Administrator\Documents\Loan.xlsx");

        // Select your Worksheet
        WorkSheet sheet = workbook.DefaultWorkSheet;

        for (int i = 0; i < sheet.RowCount; i++)
        {
            var row = new List<string>();
            for (int j = 0; j < sheet.ColumnCount; j++)
            {
                row.Add(sheet.GetCellAt(i, j).Value.ToString());
            }
            Data.Add(row);
        }
    }
    catch (Exception ex)
    {
        // Handle exceptions here
        Console.WriteLine(ex.Message);
    }
}
Public Sub OnGet()
	Try
		Data = New List(Of List(Of String))()
		' Load your Excel file
		Dim workbook = WorkBook.Load("C:\Users\Administrator\Documents\Loan.xlsx")

		' Select your Worksheet
		Dim sheet As WorkSheet = workbook.DefaultWorkSheet

		For i As Integer = 0 To sheet.RowCount - 1
			Dim row = New List(Of String)()
			For j As Integer = 0 To sheet.ColumnCount - 1
				row.Add(sheet.GetCellAt(i, j).Value.ToString())
			Next j
			Data.Add(row)
		Next i
	Catch ex As Exception
		' Handle exceptions here
		Console.WriteLine(ex.Message)
	End Try
End Sub
$vbLabelText   $csharpLabel

关键方法解释

  • WorkBook.Load(filepath):此方法从指定的文件路径加载 Excel 文档。 帮助加载和读取 Excel 表。
  • workbook.DefaultWorkSheet:此属性获取 Excel 电子表格中的默认(第一张)Excel 工作表。
  • sheet.GetCellAt(i, j).Value.ToString():这将获取指定行和列索引处的单元格,并将其值转换为字符串。 这是一个可以根据行和列索引访问 Excel 文件中特定单元格或区域的索引方法示例。

简短说明

ExcelOpener.cshtml.cs 文件中,一个名为 ExcelOpenerModel 的类表示 Razor 页面模型。 它包含一个名为 Data 的属性,类型为 List<List<string>>,将保存来自 Excel 文件的数据。

OnGet 方法在页面被请求时调用,负责从 Excel 文件中读取数据。它使用 IronXL 加载 Excel 文件,选择默认工作表,并迭代行和列以填充 Data 属性。

写入 Excel 文件

ExcelOpenerModel 类中的 OnPost 方法用于保存对 Excel 文件的修改。它首先加载 Excel 文件并检索默认工作表。 然后将来自 Data 的值写入工作表中的单元格,并将工作簿保存到新文件中。

public void OnPost()
{
    try
    {
        // Load your Excel file
        var workbook = WorkBook.Load(@"C:\Users\Administrator\Documents\Loan.xlsx");

        // Select your Worksheet
        var sheet = workbook.DefaultWorkSheet;

        for (int i = 0; i < Data.Count; i++)
        {
            for (int j = 0; j < Data[i].Count; j++)
            {
                sheet.SetCellValue(i, j, Data[i][j]);
            }
        }

        // Save the Excel file
        var filename = @"C:\ModifiedData.xlsx";
        workbook.SaveAs(filename);
    }
    catch (Exception ex)
    {
        // Handle exceptions here
        Console.WriteLine(ex.Message);
    }
}
public void OnPost()
{
    try
    {
        // Load your Excel file
        var workbook = WorkBook.Load(@"C:\Users\Administrator\Documents\Loan.xlsx");

        // Select your Worksheet
        var sheet = workbook.DefaultWorkSheet;

        for (int i = 0; i < Data.Count; i++)
        {
            for (int j = 0; j < Data[i].Count; j++)
            {
                sheet.SetCellValue(i, j, Data[i][j]);
            }
        }

        // Save the Excel file
        var filename = @"C:\ModifiedData.xlsx";
        workbook.SaveAs(filename);
    }
    catch (Exception ex)
    {
        // Handle exceptions here
        Console.WriteLine(ex.Message);
    }
}
Public Sub OnPost()
	Try
		' Load your Excel file
		Dim workbook = WorkBook.Load("C:\Users\Administrator\Documents\Loan.xlsx")

		' Select your Worksheet
		Dim sheet = workbook.DefaultWorkSheet

		For i As Integer = 0 To Data.Count - 1
			Dim j As Integer = 0
			Do While j < Data(i).Count
				sheet.SetCellValue(i, j, Data(i)(j))
				j += 1
			Loop
		Next i

		' Save the Excel file
		Dim filename = "C:\ModifiedData.xlsx"
		workbook.SaveAs(filename)
	Catch ex As Exception
		' Handle exceptions here
		Console.WriteLine(ex.Message)
	End Try
End Sub
$vbLabelText   $csharpLabel

关键方法解释

  • sheet.SetCellValue(i, j, Data[i][j]):此方法设置指定行和列索引处单元格的值。
  • workbook.SaveAs(filepath):此方法将 Excel 工作簿保存到指定的文件路径。

简短说明

OnPost 方法在表单提交时调用,并将修改后的数据保存回 Excel 文件中。它加载 Excel 文件,选择默认工作表,并根据从表单接收的修改数据更新单元格值。

编辑 Excel 数据的 HTML 表单

ExcelOpener.cshtml 中,定义了一个表单用于显示和编辑 Excel 文件中的数据。每个单元格值显示在一个文本输入字段中。 编辑后,点击“保存”按钮将提交表单,触发 OnPost 方法,并将更改保存到 Excel 文件中。

@page
@model Open_Excel_File_.NET_Core.Pages.ExcelOpenerModel

<form method="post">
    <table class="table table-bordered table-striped">
        <!-- Bootstrap classes for tables -->
        @for (int i = 0; i < Model.Data.Count; i++)
        {
            <tr>
                @for (int j = 0; j < Model.Data[i].Count; j++)
                {
                    <td>
                        <input type="text" class="form-control" name="Data[@i][@j]" value="@Model.Data[i][j]" /> <!-- Bootstrap class for form controls -->
                    </td>
                }
            </tr>
        }
    </table>

    <input type="submit" class="btn btn-primary" value="Save" /> <!-- Bootstrap classes for buttons -->
</form>
@page
@model Open_Excel_File_.NET_Core.Pages.ExcelOpenerModel

<form method="post">
    <table class="table table-bordered table-striped">
        <!-- Bootstrap classes for tables -->
        @for (int i = 0; i < Model.Data.Count; i++)
        {
            <tr>
                @for (int j = 0; j < Model.Data[i].Count; j++)
                {
                    <td>
                        <input type="text" class="form-control" name="Data[@i][@j]" value="@Model.Data[i][j]" /> <!-- Bootstrap class for form controls -->
                    </td>
                }
            </tr>
        }
    </table>

    <input type="submit" class="btn btn-primary" value="Save" /> <!-- Bootstrap classes for buttons -->
</form>
HTML

导航到页面

_Layout.cshtml 中,导航菜单中添加了指向页面的链接。 点击此链接,您将导航到 Excel opener 页面。

<li class="nav-item">
    <a class="nav-link text-dark" asp-area="" asp-page="/ExcelOpener">ExcelOpener</a>
</li>
<li class="nav-item">
    <a class="nav-link text-dark" asp-area="" asp-page="/ExcelOpener">ExcelOpener</a>
</li>
HTML

运行应用程序并解释输出

通过点击 Visual Studio 中的“构建”按钮或使用 Ctrl + Shift + B 快捷键来构建应用程序。 按 F5 或点击 Visual Studio 中的“启动”按钮运行应用程序。

应用程序运行后,通过点击导航栏中相应的链接来导航到“ExcelOpener”页面。 页面将以表格格式显示 Excel 中的数据。

您可以修改表格中的数据,然后点击“保存”按钮将更改保存回 Excel 文件中。

如何在 ASP .NET Core 中打开 Excel 文件,图 3:在 Web 应用程序中显示 Excel 数据 在 Web 应用程序中显示 Excel 数据

本教程演示了如何在 ASP.NET Core 应用程序中使用 IronXL 打开 Excel 文件。 IronXL 提供了一种简单而便捷的方式来读取和操作 Excel 文件。 您可以浏览 IronXL 文档以了解更多高级功能和特性。

IronXL 提供免费试用,让您可以评估其功能。 如果您发现它对您的项目有用,可以购买从 $799 起的许可证。

常见问题解答

如何在 ASP.NET Core 应用程序中打开 Excel 文件?

您可以使用 IronXL 库在 ASP.NET Core 应用程序中打开 Excel 文件。首先,通过 NuGet 安装 IronXL 包,然后使用 WorkBook.Load 加载您的 Excel 文件。您可以通过选择工作表并迭代行和列来访问数据。

使用 IronXL 而不是 Office Interop 进行 Excel 操作有什么好处?

IronXL 允许您在不需要 Microsoft Excel 或 Office Interop 依赖项的情况下处理 Excel 文件,适用于无法安装 Microsoft Office 的服务器环境。它支持 .NET Framework 和 .NET Core,并处理 .XLS 和 .XLSX 格式。

如何使用 Razor Pages 在 Web 应用程序中显示 Excel 数据?

要在 Web 应用程序中显示 Excel 数据,您可以创建一个 Razor 页面,使用 IronXL 加载和读取 Excel 数据。使用 HTML 表单将每个单元格的数据渲染到文本输入字段中,允许用户在 Web 界面中查看和编辑数据。

设置 ASP.NET Core 项目以进行 Excel 操作需要什么?

要设置 ASP.NET Core 项目进行 Excel 操作,您需要 .NET Core 3.1 或更高版本,像 Microsoft Visual Studio 这样的 IDE,以及对 ASP.NET Core 和 Razor Pages 的基本了解。 从 NuGet 安装 IronXL 包以开始处理 Excel 文件。

如何在 ASP.NET Core 中编辑和保存对 Excel 文件的更改?

您可以通过在 Razor 页面中通过 HTML 表单允许用户修改数据来编辑和保存对 Excel 文件的更改。使用类似 sheet.SetCellValue 的 IronXL 方法来更新数据,然后使用 workbook.SaveAs 保存已修改的 Excel 文件。

设置 Razor 页面以进行 Excel 文件操作涉及哪些步骤?

设置 Razor 页面涉及在 ASP.NET Core 项目中创建一个新的 Razor 页面。 使用 Razor 页面加载 Excel 数据,使用 IronXL,在 Web 表单中显示它,并处理表单提交以更新和保存更改回 Excel 文件。

如果我的 Excel 文件在 ASP.NET Core 中无法加载,我该如何排除故障?

如果无法加载 Excel 文件,请确保文件路径正确且应用程序可访问。 验证 IronXL 是否正确安装并支持文件格式。 检查任何可能指示问题的异常或错误消息。

我可以在购买前试用 IronXL 库吗?

是的,IronXL 提供免费试用版,您可以评估其功能。在决定购买许可证之前,您可以使用此试用版确保它符合您的需求。

Curtis Chau
技术作家

Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。

除了开发之外,Curtis 对物联网 (IoT) 有浓厚的兴趣,探索将硬件和软件集成的新方法。在空闲时间,他喜欢玩游戏和构建 Discord 机器人,将他对技术的热爱与创造力相结合。