C# ASP.NET Excel 查看器

您想在您的 Web 应用程序中显示 Microsoft Excel 工作表吗?您在寻找 ASP.NET MVC Excel 查看器吗?如果是,那么您已经降落在一个绝对正确的地方。在本博客中,您将了解如何使用 C# 在 ASP.NET MVC 应用程序中创建 Excel 查看器并显示 Excel 工作表。花费几分钟并执行一些简单的步骤后,您将拥有自己的 Excel(XLS 或 XLSX)查看器并运行。那么让我们开始吧。

ASP.NET MVC Excel 查看器的特点

我们的 ASP.NET Excel 查看器将具有以下功能,您可以根据需要对其进行增强。

  1. 浏览和查看 Excel 文件。
  2. 在页面加载时加载默认 Excel 文件。
  3. 用于在 Excel 工作表之间导航的选项卡。

在 ASP.NET MVC 中创建 Excel 查看器的步骤

以下是在 ASP.NET MVC 中查看 Excel 文件的一些简单步骤。

  1. 在 Visual Studio 中创建一个新的 ASP.NET MVC Web 应用程序。
ASP.NET MVC Web 应用程序
  1. 打开 NuGet 包管理器并安装 Aspose.Cells for .NET 包。
在浏览器中查看 ASP.NET 中的 Excel 文件
  1. 创建一个新文件夹“Documents”来保存 Excel 文件和一个子文件夹“Rendered”来保存渲染图像。

  2. 在根文件夹中创建一个名为“Helpers”的新文件夹。

  3. 在“Helpers”文件夹中创建一个名为“Sheet”的新类,用于存储 Excel 工作表的信息。

public class Sheet
{
	public string SheetName { get; set; }
	public string Path { get; set; }
}
  1. 打开“HomeController”类并将其代码替换为以下内容。确保在索引操作中替换默认 Excel 文件的名称。
public class HomeController : Controller
{
	public List<Sheet> sheets;

	[HttpGet]
	public ActionResult Index(string fileName)
	{
		sheets = new List<Sheet>();
		if (fileName == null)
		{
			// 在页面加载时显示默认工作表
			sheets = RenderExcelWorksheetsAsImage("Workbook.xlsx");
		}
		else
		{
			sheets = RenderExcelWorksheetsAsImage(fileName);
		}

		return View(sheets);
	}
	public List<Sheet> RenderExcelWorksheetsAsImage(string FileName)
	{
		// 加载 Excel 工作簿 
		Workbook book = new Workbook(Server.MapPath(Path.Combine("~/Documents", FileName)));
		var workSheets = new List<Sheet>();
		// 设置图像渲染选项
		ImageOrPrintOptions options = new ImageOrPrintOptions();
		options.HorizontalResolution = 200;
		options.VerticalResolution = 200;
		options.AllColumnsInOnePagePerSheet = true;
		options.OnePagePerSheet = true;
		options.TextCrossType = TextCrossType.Default;
		options.ImageType = Aspose.Cells.Drawing.ImageType.Png;

		string imagePath = "";
		string basePath = Server.MapPath("~/");

		// 创建 Excel 工作簿渲染器
		WorkbookRender wr = new WorkbookRender(book, options);
		// 保存和查看工作表
		for (int j = 0; j < book.Worksheets.Count; j++)
		{
			imagePath = Path.Combine("/Documents/Rendering", string.Format("sheet_{0}.png", j));
			wr.ToImage(j, basePath + imagePath);
			workSheets.Add(new Sheet { SheetName = string.Format("{0}", book.Worksheets[j].Name), Path = imagePath });
		}

		return workSheets;
	}
}
  1. 打开 Views/Home/index.cshtml 并将其内容替换为以下脚本。
@{
    ViewBag.Title = "Home Page";
    string[] files = Directory.GetFiles(Server.MapPath("~/Documents/"), "*.xlsx");
}
@model List<Excel_Viewer.Helper.Sheet>
@{
    Layout = null;
}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Excel Viewer</title>
    <!-- CSS Includes -->
    <link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
</head>
<body>
    <div class="container">
        <nav class="navbar navbar-expand-lg navbar-dark bg-dark">
            <a class="navbar-brand" href="#">Spreadsheet Viewer</a>
            <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
                <span class="navbar-toggler-icon"></span>
            </button>
            <div class="collapse navbar-collapse" id="navbarNav">
                <ul class="navbar-nav">
                    <li class="nav-item active">
                        <button type="button" class="btn btn-primary" data-toggle="modal" data-target="#exampleModal">
                            browse
                        </button>
                    </li>
                </ul>
            </div>
        </nav>
        <br />
        <ul class="nav nav-tabs" id="myTab" role="tablist">
            @for (int i = 0; i < Model.Count; i++)
            {
                if (i == 0)
                {
                    <li class="nav-item">
                        <a class="nav-link active" id="@Model[i].SheetName.Replace(' ','_')-tab" data-toggle="tab" href="#@Model[i].SheetName.Replace(' ','_')" role="tab" aria-controls="@Model[i].SheetName">@Model[i].SheetName</a>
                    </li>
                }
                else
                {
                    <li class="nav-item">
                        <a class="nav-link" id="@Model[i].SheetName.Replace(' ','_')-tab" data-toggle="tab" href="#@Model[i].SheetName.Replace(' ','_')" role="tab" aria-controls="@Model[i].SheetName">@Model[i].SheetName</a>
                    </li>
                }
            }
        </ul>
        <div class="tab-content" id="myTabContent">
            @for (int i = 0; i < Model.Count; i++)
            {
                if (i == 0)
                {
                    <div class="tab-pane fade show active" id="@Model[i].SheetName.Replace(' ','_')" role="tabpanel"><br />
                        <div class="card">
                            <div class="card-body"> <img src="@Model[i].Path" style="width: 11in" /></div>
                        </div>
                    </div>
                }
                else
                {
                    <div class="tab-pane fade" id="@Model[i].SheetName.Replace(' ','_')" role="tabpanel"><br />
                        <div class="card">
                            <div class="card-body"> <img src="@Model[i].Path" style="width: 11in" /></div>
                        </div>
                    </div>
                }
            }
        </div>
    </div>
    <!-- Modal -->
    <div class="modal fade" id="exampleModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
        <div class="modal-dialog" role="document">
            <div class="modal-content">
                <div class="modal-header">
                    <h5 class="modal-title" id="exampleModalLabel">Select a file</h5>
                    <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                        <span aria-hidden="true">&times;</span>
                    </button>
                </div>
                <div class="modal-body">
                    <div class="list-group">
                        @foreach (string s in files)
                        {
                            string fileName = Path.GetFileName(s);
                            @Html.ActionLink(fileName, "Index", "Home", new { fileName = fileName }, new { @class = "list-group-item" })
                        }
                    </div>
                </div>
                <div class="modal-footer">
                    <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
                </div>
            </div>
        </div>
    </div>
    <!-- JS includes -->
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
    <script src="//netdna.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js"></script> @**@
    <script src="//ajax.aspnetcdn.com/ajax/jquery.validate/1.11.1/jquery.validate.min.js"></script>
    <script src="//ajax.aspnetcdn.com/ajax/mvc/4.0/jquery.validate.unobtrusive.min.js"></script>
</body>
</html>
  1. 构建应用程序并在您喜欢的浏览器中运行它。

在 ASP.NET MVC 查看器中查看 Excel 文件 - 演示

首次启动应用程序时,将显示默认 Excel 文件。

ASP.NET C# 中的 Excel 查看器

打开一个 Excel 文件

要打开 Excel 文件,请单击浏览按钮并从列表中选择文件。

浏览 Excel 文件
在 ASP.NET C# 中打开 Excel 文件

使用选项卡在 Excel 工作表之间导航

Excel 工作簿中的所有工作表都将以选项卡的形式显示。您可以单击选项卡在工作表之间导航。

在 ASP.NET 中显示 Excel 文件

下载源代码

此应用程序是开源的,其源代码可在 GitHub 上找到。

获得 Aspose.Cells for .NET 的临时许可证

您可以获得 Aspose.Cells for .NET API 的 临时许可证 以避免评估/试用限制。