跳過到頁腳內容
使用 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 應用程序的數據來源和電子表格需求。 IronXL 庫將被用來在 ASP.NET Web 應用程序中查看 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 程序包管理器界面中搜索並安裝 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 是一個字符串數組的列表,用於存儲 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 屬性來上傳文件,一個 Message 字符串來顯示任何信息,以及一個 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 文件中的工作表名稱相同。點擊選項卡將以表格格式顯示相應工作表的數據。

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

結論

您剛剛使用 IronXL 創建了一個 ASP.NET Excel 查看器! 這個強大的庫使用戶能夠更有效和可管理地處理 Excel 文件。 借助 IronXL,在 .NET 環境中處理 Excel 文件從未如此簡單。

IronXL provides a 免費試用,讓您可以在無需任何前期成本的情況下探索和瞭解其豐富的功能。一旦您測試並發現它是您需求的完美解決方案,許可證起價為 $799。

常見問題解答

我如何使用 ASP.NET MVC 創建 Excel 檢視器?

您可以通過在 Visual Studio 中設置新的專案並通過 NuGet 套件管理器添加 IronXL 庫來創建 Excel 檢視器。這允許您在網頁應用中直接加載、顯示和操作 Excel 文件。

設置 ASP.NET MVC 專案以處理 Excel 檔案的步驟是什麼?

要設置處理 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 提供了幾個優勢進行 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 文檔讀取數據,並將新數據或更改寫入到 Excel 文件中,支持多種格式,包括 XLS、XLSX 和 CSV。

在 ASP.NET MVC 應用中,應該創建哪些模型來管理 Excel 資料?

在 ASP.NET MVC 應用中,您應該創建如 ExcelModel 的模型來表示單個 Excel 工作表,並創建 ExcelViewModel 來管理工作表集合並處理文件上傳和消息。

如何在購買之前測試 IronXL 的功能?

您可以通過下載其網站上的免費試用版本來測試 IronXL 的功能。此試用版允許您探索庫在 .NET 應用中處理 Excel 文件的功能,無需任何初始成本。

Jordi Bardia
軟體工程師
Jordi 在 Python、C# 和 C++ 上最得心應手,當他不在 Iron Software 展現技術時,便在做遊戲編程。在分担产品测测试,产品开发和研究的责任时,Jordi 为持续的产品改进增值。他说这种多样化的经验使他受到挑战并保持参与, 而这也是他与 Iron Software 中工作一大乐趣。Jordi 在佛罗里达州迈阿密长大,曾在佛罗里达大学学习计算机科学和统计学。