跳至页脚内容
使用 IRONXL

如何在 ASP.NET 中查看 Excel

本综合教程将演示如何使用ASP.NET MVC和IronXL构建一个Excel查看器。 此查看器将使用户能够直接从他们的网页中显示、编辑和浏览Excel文件。

什么是 IronXL?

IronXL 是一个功能强大的.NET库,提供与Excel操作相关的大量功能。 它提供了简化的API,让.NET开发人员能够以包括XLS、XLSX、CSV等在内的各种文件格式编写、操作和读取Excel文档

With IronXL, you can read Excel files, extract data, add or edit worksheets, create or modify rows and columns, apply formulas, save changes, and so much more. 所有这些操作都可以在不需要在您的机器上安装Microsoft Excel的情况下进行。

IronXL支持图像、样式、条件格式和其他复杂的Excel功能,使其成为.NET Excel操作的全面解决方案。 它非常适合处理您的ASP.NET MVC应用程序的数据源和电子表格需求。 将在ASP.NET Web应用程序中使用IronXL库查看Excel文件。

前提条件

  • 对ASP.NET MVC有基本了解
  • 在您的机器上安装了Visual Studio
  • 安装了 IronXL 库。 您可以在其官方文档中找到安装指南。

开始

首先,让我们在Visual Studio中创建一个新的ASP.NET MVC项目。

  1. 打开 Visual Studio。
  2. 点击文件 > 新建 > 项目
  3. 在新项目窗口中,选择ASP.NET Web 应用程序 (.NET Framework) 模板。

如何在ASP.NET中查看Excel,图1:在Visual Studio中创建新的ASP.NET Web应用程序 在Visual Studio中创建新的ASP.NET Web应用程序

  1. 命名您的项目ExcelViewer,选择项目位置,然后点击创建按钮。

如何在ASP.NET中查看Excel,图2:配置您的项目 配置您的项目

这篇文章将集中在实现此ASP.NET MVC应用程序中的Excel查看器功能。

将IronXL添加到您的项目中

为了处理Excel文件格式(如.xls、.xlsx和.csv),IronXL提供全面的功能来加载Excel文档、读取、写入甚至修改Excel数据。 它支持公式、图像、格式化等多种功能。

  1. 解决方案资源管理器中右键点击您的项目,然后导航到管理NuGet包
  2. NuGet包管理器中,搜索IronXL.Excel
  3. 点击安装将其添加到您的项目中。

如何在ASP.NET中查看Excel,图3:在NuGet包管理器UI中搜索并安装IronXL包 在 NuGet 包管理器 UI 中搜索并安装 IronXL 包

您还可以使用以下命令通过包管理器控制台安装IronXL:

Install-Package IronXL.Excel

如何在ASP.NET中查看Excel,图4:从包管理器控制台安装IronXL包 从包管理器控制台安装IronXL包

现在IronXL已安装,让我们进入下一步。

构建模型

ExcelModel

第一步是为Excel数据创建一个模型。 ExcelModel类将代表一个Excel工作表,并将包含工作表名称和Excel工作表中的数据。

namespace Excel_File_Viewer_IronXL.Models
{
    public class ExcelModel
    {
        public string SheetName { get; set; }

        // Data is a list of string arrays, each array represents a row in the sheet.
        public List<string[]> Data { get; set; }
    }
}
namespace Excel_File_Viewer_IronXL.Models
{
    public class ExcelModel
    {
        public string SheetName { get; set; }

        // Data is a list of string arrays, each array represents a row in the sheet.
        public List<string[]> Data { get; set; }
    }
}
Namespace Excel_File_Viewer_IronXL.Models
	Public Class ExcelModel
		Public Property SheetName() As String

		' Data is a list of string arrays, each array represents a row in the sheet.
		Public Property Data() As List(Of String())
	End Class
End Namespace
$vbLabelText   $csharpLabel

ExcelModel定义了两个属性,SheetNameDataSheetName 是一个简单字符串,用于保存每个Excel工作表的名称。 Data 是一个字符串数组List,用于存储Excel工作表中每行的数据。

ExcelViewModel

接下来,让我们创建ExcelViewModel。 这个模型是一个包含文件、消息和ExcelModel列表的包装,代表文件中所有工作表的数据。

using Microsoft.AspNetCore.Http;
using System.Collections.Generic;

namespace Excel_File_Viewer_IronXL.Models
{
    public class ExcelViewModel
    {
        public IFormFile File { get; set; }  // For uploading Excel file
        public string Message { get; set; }  // Message for storing success/error messages
        public List<ExcelModel> ExcelData { get; set; }  // List to store data from all sheets
    }
}
using Microsoft.AspNetCore.Http;
using System.Collections.Generic;

namespace Excel_File_Viewer_IronXL.Models
{
    public class ExcelViewModel
    {
        public IFormFile File { get; set; }  // For uploading Excel file
        public string Message { get; set; }  // Message for storing success/error messages
        public List<ExcelModel> ExcelData { get; set; }  // List to store data from all sheets
    }
}
Imports Microsoft.AspNetCore.Http
Imports System.Collections.Generic

Namespace Excel_File_Viewer_IronXL.Models
	Public Class ExcelViewModel
		Public Property File() As IFormFile ' -  For uploading Excel file
		Public Property Message() As String ' -  Message for storing success/error messages
		Public Property ExcelData() As List(Of ExcelModel) ' -  List to store data from all sheets
	End Class
End Namespace
$vbLabelText   $csharpLabel

此类将用作视图模型。 它具有一个IFormFile属性用于文件上传,一个消息字符串用于显示任何消息,以及一个List<ExcelModel>用于存储检索到的Excel数据。

5. 创建ExcelController以加载Excel文件进行数据提取

然后创建一个新的ExcelController。 这是奇迹发生的地方! Excel文件是使用IronXL的WorkBook.Load函数加载的,循环遍历工作表,提取数据并将其添加到ExcelViewModel

using Excel_File_Viewer_IronXL.Models;
using IronXL;
using System.Collections.Generic;
using System.Web.Mvc;
using System;
using System.Linq;

public class ExcelController : Controller
{
    // GET: Excel
    public ActionResult Index()
    {
        var model = new ExcelViewModel();

        // Define the file path for the Excel file
        string filePath = Server.MapPath("~/App_Data/Test.xlsx"); 

        // List to store data for each sheet
        List<ExcelModel> data = new List<ExcelModel>();

        try
        {
            // Load workbook directly from a file path
            var workbook = WorkBook.Load(filePath);

            // Loop through all worksheets in the workbook
            foreach (var worksheet in workbook.WorkSheets)
            {
                // Add each worksheet's name and data to the data list
                data.Add(new ExcelModel
                {
                    SheetName = worksheet.Name,
                    Data = worksheet.Rows.Select(r => r.ToArray().Select(c => c.Value.ToString()).ToArray()).ToList()
                });
            }

            model.ExcelData = data;
            model.Message = "File processed successfully!";
        }
        catch (Exception ex)
        {
            model.Message = $"Error occurred while processing file: {ex.Message}";
        }

        return View(model);
    }
}
using Excel_File_Viewer_IronXL.Models;
using IronXL;
using System.Collections.Generic;
using System.Web.Mvc;
using System;
using System.Linq;

public class ExcelController : Controller
{
    // GET: Excel
    public ActionResult Index()
    {
        var model = new ExcelViewModel();

        // Define the file path for the Excel file
        string filePath = Server.MapPath("~/App_Data/Test.xlsx"); 

        // List to store data for each sheet
        List<ExcelModel> data = new List<ExcelModel>();

        try
        {
            // Load workbook directly from a file path
            var workbook = WorkBook.Load(filePath);

            // Loop through all worksheets in the workbook
            foreach (var worksheet in workbook.WorkSheets)
            {
                // Add each worksheet's name and data to the data list
                data.Add(new ExcelModel
                {
                    SheetName = worksheet.Name,
                    Data = worksheet.Rows.Select(r => r.ToArray().Select(c => c.Value.ToString()).ToArray()).ToList()
                });
            }

            model.ExcelData = data;
            model.Message = "File processed successfully!";
        }
        catch (Exception ex)
        {
            model.Message = $"Error occurred while processing file: {ex.Message}";
        }

        return View(model);
    }
}
Imports Excel_File_Viewer_IronXL.Models
Imports IronXL
Imports System.Collections.Generic
Imports System.Web.Mvc
Imports System
Imports System.Linq

Public Class ExcelController
	Inherits Controller

	' GET: Excel
	Public Function Index() As ActionResult
		Dim model = New ExcelViewModel()

		' Define the file path for the Excel file
		Dim filePath As String = Server.MapPath("~/App_Data/Test.xlsx")

		' List to store data for each sheet
		Dim data As New List(Of ExcelModel)()

		Try
			' Load workbook directly from a file path
			Dim workbook = WorkBook.Load(filePath)

			' Loop through all worksheets in the workbook
			For Each worksheet In workbook.WorkSheets
				' Add each worksheet's name and data to the data list
				data.Add(New ExcelModel With {
					.SheetName = worksheet.Name,
					.Data = worksheet.Rows.Select(Function(r) r.ToArray().Select(Function(c) c.Value.ToString()).ToArray()).ToList()
				})
			Next worksheet

			model.ExcelData = data
			model.Message = "File processed successfully!"
		Catch ex As Exception
			model.Message = $"Error occurred while processing file: {ex.Message}"
		End Try

		Return View(model)
	End Function
End Class
$vbLabelText   $csharpLabel

Here, initialize an ExcelViewModel and then load the WorkBook using IronXL, loop through each WorkSheet, and for each WorkSheet, we create an ExcelModel with the name and data of the worksheet. ExcelModel随后被添加到ExcelViewModel中的ExcelData列表中。

将加载和显示以下Excel文件的数据:

如何在ASP.NET中查看Excel,图5:示例Excel文件 示例Excel文件

6. 创建视图

在您的Views/Excel目录中,创建一个新的HTML文件Index.cshtml以显示Excel数据。 然后使用Bootstrap的nav-tabs来表示Excel文件中的每个工作表。每个工作表将是一个单独的标签,标签的内容将是工作表的数据。

@model Excel_File_Viewer_IronXL.Models.ExcelViewModel

@{
    ViewBag.Title = "Index";
}

<h2>Excel File Viewer</h2>

@if (Model.ExcelData != null)
{
    <ul class="nav nav-tabs" id="myTab" role="tablist">
        @for (int i = 0; i < Model.ExcelData.Count; i++)
        {
            <li class="nav-item">
                <a class="nav-link @(i == 0 ? "active" : "")" id="tab-@i" data-toggle="tab" href="#content-@i" role="tab" aria-controls="content-@i" aria-selected="@(i == 0)">
                    @Model.ExcelData[i].SheetName
                </a>
            </li>
        }
    </ul>
    <div class="tab-content" id="myTabContent">
        @for (int i = 0; i < Model.ExcelData.Count; i++)
        {
            <div class="tab-pane fade @(i == 0 ? "show active" : "")" id="content-@i" role="tabpanel" aria-labelledby="tab-@i">
                <table class="table table-bordered">
                    @foreach (var row in Model.ExcelData[i].Data)
                    {
                        <tr>
                            @foreach (var cell in row)
                            {
                                <td>@cell</td>
                            }
                        </tr>
                    }
                </table>
            </div>
        }
    </div>
}
@model Excel_File_Viewer_IronXL.Models.ExcelViewModel

@{
    ViewBag.Title = "Index";
}

<h2>Excel File Viewer</h2>

@if (Model.ExcelData != null)
{
    <ul class="nav nav-tabs" id="myTab" role="tablist">
        @for (int i = 0; i < Model.ExcelData.Count; i++)
        {
            <li class="nav-item">
                <a class="nav-link @(i == 0 ? "active" : "")" id="tab-@i" data-toggle="tab" href="#content-@i" role="tab" aria-controls="content-@i" aria-selected="@(i == 0)">
                    @Model.ExcelData[i].SheetName
                </a>
            </li>
        }
    </ul>
    <div class="tab-content" id="myTabContent">
        @for (int i = 0; i < Model.ExcelData.Count; i++)
        {
            <div class="tab-pane fade @(i == 0 ? "show active" : "")" id="content-@i" role="tabpanel" aria-labelledby="tab-@i">
                <table class="table table-bordered">
                    @foreach (var row in Model.ExcelData[i].Data)
                    {
                        <tr>
                            @foreach (var cell in row)
                            {
                                <td>@cell</td>
                            }
                        </tr>
                    }
                </table>
            </div>
        }
    </div>
}
model ReadOnly Property () As Excel_File_Viewer_IronXL.Models.ExcelViewModel
	ViewBag.Title = "Index"
End Property

'INSTANT VB TODO TASK: The following line could not be converted:
(Of h2) Excel File Viewer</h2> [if](Model.ExcelData != Nothing)
If True Then
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: <ul class="nav nav-tabs" id="myTab" role="tablist"> for(int i = 0; i < Model.ExcelData.Count; i++)
	"myTab" role="tablist"> [for](Integer i = 0; i < Model.ExcelData.Count; i)
		If True Then
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: <ul class="nav nav-tabs" id="myTab" role
	"nav nav-tabs" id="myTab" role
	<ul class="nav nav-tabs" id
	i += 1
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: <li class="nav-item"> <a class="nav-link @(i == 0 ? "active" : "")" id="tab-@i" data-toggle="tab" href="#content-@i" role="tab" aria-controls="content-@i" aria-selected="@(i == 0)"> @Model.ExcelData[i].SheetName </a> </li>
			"content-@i" aria-selected="@(i == 0)"> Model.ExcelData(i).SheetName </a> </li>
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: <li class="nav-item"> <a class="nav-link @(i == 0 ? "active" : "")" id="tab-@i" data-toggle="tab" href="#content-@i" role="tab" aria-controls="content-@i" aria-selected
			"tab" aria-controls="content-@i" aria-selected
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: <li class="nav-item"> <a class="nav-link @(i == 0 ? "active" : "")" id="tab-@i" data-toggle="tab" href="#content-@i" role="tab" aria-controls
			"#content-@i" role="tab" aria-controls
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: <li class="nav-item"> <a class="nav-link @(i == 0 ? "active" : "")" id="tab-@i" data-toggle="tab" href="#content-@i" role
			"tab" href="#content-@i" role
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: <li class="nav-item"> <a class="nav-link @(i == 0 ? "active" : "")" id="tab-@i" data-toggle="tab" href
			"tab-@i" data-toggle="tab" href
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: <li class="nav-item"> <a class="nav-link @(i == 0 ? "active" : "")" id="tab-@i" data-toggle
			"nav-link @(i == 0 ? "active" : "")" id="tab-@i" data-toggle
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: <li class="nav-item"> <a class="nav-link @(i == 0 ? "active" : "")" id
			"nav-item"> <a class="nav-link @(i == 0 ? "active" : "")" id
			<li class="nav-item"> <a class
		End If
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: </ul> <div class="tab-content" id="myTabContent"> for(int i = 0; i < Model.ExcelData.Count; i++)
	"tab-content" id="myTabContent"> [for](Integer i = 0; i < Model.ExcelData.Count; i)
		If True Then
	</ul> <div class="tab-content" id
	i += 1
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: <div class="tab-pane fade @(i == 0 ? "show active" : "")" id="content-@i" role="tabpanel" aria-labelledby="tab-@i"> <table class="table table-bordered"> foreach(var row in Model.ExcelData[i].Data)
			"tab-@i"> <table class="table table-bordered"> foreach(var row in Model.ExcelData(i).Data)
					If True Then
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: <div class="tab-pane fade @(i == 0 ? "show active" : "")" id="content-@i" role="tabpanel" aria-labelledby="tab-@i"> <table class
			"tabpanel" aria-labelledby="tab-@i"> <table class
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: <div class="tab-pane fade @(i == 0 ? "show active" : "")" id="content-@i" role="tabpanel" aria-labelledby
			"content-@i" role="tabpanel" aria-labelledby
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: <div class="tab-pane fade @(i == 0 ? "show active" : "")" id="content-@i" role
			"tab-pane fade @(i == 0 ? "show active" : "")" id="content-@i" role
			<div class="tab-pane fade @(i == 0 ? "show active" : "")" id
'INSTANT VB TODO TASK: Local functions are not converted by Instant VB:
'						(Of tr) @foreach(var cell in row)
'							{
'								<td> @cell</td>
'							}
						</tr>
					End If
				</table> </div>
		End If
	</div>
End If
$vbLabelText   $csharpLabel

在此代码示例中,nav nav-tabs将生成一个标签列表,每个标签代表Excel文件中的一个工作表。相应的标签内容将以表格格式显示各工作表的数据。 通过进行一些更改,添加了一个浏览按钮以手动选择Excel文件。

运行程序

按下所有步骤进行设置并正确设置项目后,是时候运行它了。 您应该会看到一个以Excel文件中的工作表名称命名的tabs构成的网页。点击标签将以表格式显示相应工作表的数据。

如何在ASP.NET中查看Excel,图6:Excel查看器 Excel查看器

结论

您刚刚使用IronXL创建了一个ASP.NET Excel查看器! 这个强大的库使用户能够更高效、更易于管理地处理Excel文件。 在.NET环境中,借助IronXL,处理Excel文件从未如此简单。

IronXL provides a 免费试用,让您能够在没有任何前期费用的情况下探索和了解其广泛功能。一旦测试并发现其能够完美满足您的需求,许可证从$799起始。

常见问题解答

如何使用 ASP.NET MVC 创建一个 Excel 查看器?

您可以通过在 Visual Studio 中设置一个新项目并通过 NuGet 包管理器添加 IronXL 库来使用 ASP.NET MVC 创建一个 Excel 查看器。这使您能够直接在网页应用程序中加载、显示和操作 Excel 文件。

为处理 Excel 文件设置 ASP.NET MVC 项目的步骤是什么?

要为处理 Excel 文件设置 ASP.NET MVC 项目,请打开 Visual Studio,创建一个新的 ASP.NET Web 应用程序项目,并通过 NuGet 安装 IronXL 库。接下来,实现像 ExcelModelExcelViewModel 这样的模型来管理 Excel 数据,并使用 ExcelController 来加载和处理 Excel 文件。

我可以在 ASP.NET 应用程序中显示多个 Excel 工作表吗?

是的,您可以在 ASP.NET 应用程序中显示多个 Excel 工作表,通过使用 IronXL 加载 Excel 文件,然后利用 Bootstrap 的 nav-tabs 创建每个工作表的单独选项卡,以表格格式显示数据。

如何使用 .NET 库在 ASP.NET 中加载和处理 Excel 文件?

在 ASP.NET 中,您可以使用 IronXL 的 WorkBook.Load 方法加载和处理 Excel 文件。此方法允许您读取 Excel 文件,遍历其工作表并提取数据以供显示或进一步处理。

在 .NET 中使用 IronXL 进行 Excel 操作的优势是什么?

IronXL 在 .NET 中进行 Excel 操作具有几个优势,包括支持多种 Excel 文件格式,能够操作复杂的 Excel 功能(如图像和条件格式),以及无需在服务器上安装 Microsoft Excel。

创建 ASP.NET Excel 查看器时如何排查常见问题?

创建 ASP.NET Excel 查看器时的常见问题可以通过确保 IronXL 库已通过 NuGet 正确安装、验证所有必要的模型和控制器是否已正确实现以及确保 Excel 文件格式受支持来排查。

是否可以直接从 ASP.NET 网页编辑 Excel 文件?

是的,可以使用 IronXL 直接从 ASP.NET 网页编辑 Excel 文件。该库允许您将 Excel 文件加载到网页应用程序中,修改数据并无缝地将更改保存回文件。

IronXL 是否支持读取和写入 Excel 文件?

是的,IronXL 支持读取和写入 Excel 文件。您可以使用它读取现有 Excel 文档中的数据,并以多种格式(包括 XLS、XLSX 和 CSV)将新数据或更改写入 Excel 文件。

在 ASP.NET MVC 应用程序中应创建什么模型来管理 Excel 数据?

在 ASP.NET MVC 应用程序中,您应该创建诸如 ExcelModel 之类的模型以表示单个 Excel 表,以及 ExcelViewModel 用于管理表集合并处理文件上传和消息传递。

如何在购买前测试 IronXL 的功能?

您可以通过下载其网站上提供的免费试用版来测试 IronXL 的功能。此试用版允许您无需任何初始费用即可在您的 .NET 应用程序中探索该库在处理 Excel 文件方面的能力。

Curtis Chau
技术作家

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

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