在實際環境中測試
在生產環境中測試無浮水印。
在任何需要的地方都能運作。
這個綜合性教程將演示如何使用 ASP.NET MVC 和 IronXL 構建 Excel 檢視器。 此檢視器將使用戶能夠直接從他們的網頁顯示、編輯和瀏覽 Excel 文件。
IronXL是一個功能強大的 .NET 函式庫,提供與 Excel 操作相關的豐富功能。 它提供了一個簡化的 API,讓 .NET 開發人員可以編寫、操作和讀取 Excel 文件以各種檔案格式,包括XLS、XLSX、CSV等。
使用 IronXL,您可以讀取 Excel 文件,提取資料新增或編輯工作表,建立或修改行和列,套用公式、儲存變更等更多功能。 所有這些操作都可以在不需要安裝 Microsoft Excel 的情況下在您的機器上進行。
IronXL 支援圖片、樣式,條件格式化,以及其他複雜的 Excel 功能,讓它成為 .NET Excel 操作的全面解決方案。 它非常適合處理您的ASP.NET MVC應用程式的數據來源和電子表格需求。 IronXL 函式庫將用於在 ASP.NET Web 應用程式中檢視 Excel 文件。
首先,我們在 Visual Studio 中創建一個新的 ASP.NET MVC 專案。
打開 Visual Studio。
按一下 檔案 > 新增 > 專案。
在新專案視窗中,選擇ASP.NET Web 應用程式(.NET框架)** 模板。
在 Visual Studio 中建立新的 ASP.NET Web 應用程式
將您的專案命名為 ExcelViewer,選擇專案位置並點擊 Create 按鈕。
配置您的專案
本文將著重在此 ASP.NET MVC 應用程式中實現 Excel 檢視器功能。
處理 Excel 文件格式(例如 .xls、.xlsx 和 .csv), IronXL 提供全面的功能來載入 Excel 文件、讀取、寫入,甚至修改 Excel 數據。 它支援公式、圖像、格式化及更多功能。
在方案總管中右鍵點擊你的專案,然後導航到管理 NuGet 套件。
在 NuGet Package Manager 中,搜索 IronXL.Excel。
點擊 Install 將其添加到您的專案。
在 NuGet 包管理器 UI 中搜尋並安裝 IronXL 套件
您也可以透過以下命令使用套件管理器主控台安裝IronXL:
Install-Package IronXL.Excel
從套件管理器主控台安裝 IronXL 套件
現在安裝了IronXL,我們來進行下一步。
ExcelModel
第一步是為 Excel 資料創建一個模型。 ExcelModel
類將代表單一 Excel 工作表,並包含該工作表的名稱及其內的數據。
namespace Excel_File_Viewer_IronXL.Models
{
public class ExcelModel
{
public string SheetName { get; set; }
public List<string []> Data { get; set; }
}
}
namespace Excel_File_Viewer_IronXL.Models
{
public class ExcelModel
{
public string SheetName { get; set; }
public List<string []> Data { get; set; }
}
}
Namespace Excel_File_Viewer_IronXL.Models
Public Class ExcelModel
Public Property SheetName() As String
Public Property Data() As List(Of String ())
End Class
End Namespace
ExcelModel
被定義為具有兩個屬性,SheetName
和 Data
。 SheetName
是一個簡單的字串,用來保存每個 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; }
public string Message { get; set; }
public List<ExcelModel> ExcelData { get; set; }
}
}
using Microsoft.AspNetCore.Http;
using System.Collections.Generic;
namespace Excel_File_Viewer_IronXL.Models
{
public class ExcelViewModel
{
public IFormFile File { get; set; }
public string Message { get; set; }
public List<ExcelModel> ExcelData { get; set; }
}
}
Imports Microsoft.AspNetCore.Http
Imports System.Collections.Generic
Namespace Excel_File_Viewer_IronXL.Models
Public Class ExcelViewModel
Public Property File() As IFormFile
Public Property Message() As String
Public Property ExcelData() As List(Of ExcelModel)
End Class
End Namespace
此類別將用作視圖模型。 它有一個(n) IFormFile
屬性用於檔案上傳,一個 Message
字串用於顯示任何訊息,和一個 List
ExcelController
以加載 Excel 文件進行數據提取然後建立一個新的 ExcelController
。 這就是魔法發生的地方! 使用 IronXL 載入 Excel 文件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
string filePath = Server.MapPath("~/App_Data/Test.xlsx");
// Replace 'Test.xlsx' with your file name
List<ExcelModel> data = new List<ExcelModel>();
try
{
// Load workbook directly from a file path
var workbook = WorkBook.Load(filePath);
foreach (var worksheet in workbook.WorkSheets)
{
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
string filePath = Server.MapPath("~/App_Data/Test.xlsx");
// Replace 'Test.xlsx' with your file name
List<ExcelModel> data = new List<ExcelModel>();
try
{
// Load workbook directly from a file path
var workbook = WorkBook.Load(filePath);
foreach (var worksheet in workbook.WorkSheets)
{
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
Dim filePath As String = Server.MapPath("~/App_Data/Test.xlsx")
' Replace 'Test.xlsx' with your file name
Dim data As New List(Of ExcelModel)()
Try
' Load workbook directly from a file path
Dim workbook = WorkBook.Load(filePath)
For Each worksheet In workbook.WorkSheets
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
在這裡,初始化一個(n)ExcelViewModel
然後載入Workbook
使用 IronXL,遍歷每個工作表
,並為每個 WorkSheet
創建一個(n)ExcelModel
包含工作表的名稱和數據。 然後將 ExcelModel
添加到 ExcelViewModel
中的 ExcelData
列表中。
以下 Excel 文件的數據即將被載入並顯示:
範例 Excel 文件
在您的 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
在此代碼範例中,nav nav-tabs
將生成一個標籤列表,每個標籤代表 Excel 文件中的一個工作表。相應的標籤內容將以表格格式顯示該工作表的數據。 通過進行一些更改,添加了一個瀏覽按鈕以手動選擇 Excel 文件。
在您完成所有步驟並正確設置專案後,就可以開始執行它了。 您應該會看到一個網頁,其上有以您 Excel 文件中的工作表名稱命名的標籤。點擊標籤將以表格格式顯示相應工作表的數據。
Excel 檢視器
您剛剛使用 IronXL 創建了一個 ASP.NET Excel 查看器。! 這個強大的程式庫使用户能夠以更高效和便於管理的方式處理 Excel 文件。 有了 IronXL,在 .NET 環境中處理 Excel 文件從未如此輕鬆。
IronXL提供一個免費試用,讓您可以在無需預付費用的情況下探索和了解其廣泛功能。一旦您測試過並發現它是適合您的完美解決方案,許可證價格從 $749 開始。