IRONXLの使用

ASP.NETでExcelを表示する方法

更新済み 6月 27, 2023
共有:

この包括的なチュートリアルでは、ASP.NET MVCとIronXLを使用してExcelビューアを構築する方法を示します。 このビューアーにより、ユーザーはウェブページから直接Excelファイルを表示、編集、およびナビゲートできるようになります。

IronXLとは何ですか?

IronXL は、Excel操作に関連する機能を多数提供する強力な.NETライブラリです。 .NET開発者が書き込み、操作しやすいシンプルなAPIを提供します。 Excelドキュメントを読み取る XLS、XLSX、CSV などのさまざまなファイル形式で。

IronXLを使用すると、Excelファイルを読み取ることができます。 データを抽出するワークシートを追加または編集します 行と列を作成または修正する適用 数式保存変更、そしてそれ以上の機能。 これらすべての操作は、あなたのマシンに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 Application を選択します。 (.NETフレームワーク)テンプレート

    ASP.NETでExcelを表示する方法、図1: Visual Studioで新しいASP.NET Webアプリケーションを作成する

    新しい ASP.NET Web アプリケーションを Visual Studio で作成する

  4. プロジェクトにExcelViewerという名前を付け、プロジェクトの場所を選択して、Createボタンをクリックします。

    ASP.NETでExcelを表示する方法, 図2:プロジェクトの設定

    プロジェクトを構成する

    この記事では、Excelビューア機能をこのASP.NET MVCアプリケーションに実装することに焦点を当てます。

プロジェクトへの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パッケージを検索してインストールする

    以下のコマンドを使用して、Package Manager コンソールから 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; }
        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
VB   C#

ExcelModelは2つのプロパティ、SheetNameDataで定義されています。 SheetNameは、各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
VB   C#

このクラスはビューモデルとして使用されます。 それは(n) ファイルアップロードのための IFormFile プロパティ、メッセージを表示するための Message 文字列、そして `List取得したExcelデータを保存するため。

Excelファイルからデータを抽出するために、ExcelControllerを作成する。

次に、新しい 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
        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
VB   C#

ここでは、初期化します。(n) ExcelViewModelを読み込んでください WorkBook IronXLを使用して、各列をループする ワークシートそして、各 WorkSheet に対して、私たちは WorkSheet を作成します(n) シートの名前とデータを含む ExcelModel。 その後、ExcelModelExcelViewModelExcelData リストに追加されます。

次のExcelファイルのデータがロードされ表示されます:

ASP.NETでExcelを表示する方法、図5:サンプルExcelファイル

サンプルExcelファイル

ビューを作成する

  1. プロジェクトに新しいCSHTMLファイルを追加 - プロジェクトのViewsフォルダ内に新しいCSHTMLファイルを作成します。
  2. IronPDFを使用してビューをレンダリング - 次に、コントローラのアクションでIronPDFを使用してビューをPDFとしてレンダリングします。

基本的なコードスニペットは以下の通りです:

public ActionResult ExportViewAsPdf()
{
    var Renderer = new IronPdf.ChromePdfRenderer();

    var pdf = Renderer.RenderHtmlAsPdf(RenderViewToString("ViewName"));

    var OutputPath = Path.Combine(Server.MapPath("~/IronPdfPdf.pdf"));
    pdf.SaveAs(OutputPath);

    return File(OutputPath, "application/pdf", "ExportedView.pdf");
}
public ActionResult ExportViewAsPdf()
{
    var Renderer = new IronPdf.ChromePdfRenderer();

    var pdf = Renderer.RenderHtmlAsPdf(RenderViewToString("ViewName"));

    var OutputPath = Path.Combine(Server.MapPath("~/IronPdfPdf.pdf"));
    pdf.SaveAs(OutputPath);

    return File(OutputPath, "application/pdf", "ExportedView.pdf");
}
Public Function ExportViewAsPdf() As ActionResult
	Dim Renderer = New IronPdf.ChromePdfRenderer()

	Dim pdf = Renderer.RenderHtmlAsPdf(RenderViewToString("ViewName"))

	Dim OutputPath = Path.Combine(Server.MapPath("~/IronPdfPdf.pdf"))
	pdf.SaveAs(OutputPath)

	Return File(OutputPath, "application/pdf", "ExportedView.pdf")
End Function
VB   C#

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
VB   C#

このコード例では、nav nav-tabs がタブのリストを生成し、それぞれがExcelファイルのシートを表します。対応するタブの内容は、各シートのデータをテーブル形式で表示します。 一部の変更を加えることで、Excelファイルを手動で選択するためのブラウズボタンが追加されます。

プログラムの実行

すべての手順に従ってプロジェクトのセットアップが完了したら、実行する時です。 Excelファイルのシート名にちなんで名付けられたタブが表示されているウェブページが見えるはずです。タブをクリックすると、それぞれのシートのデータがテーブル形式で表示されます。

ASP.NETでExcelを表示する方法、図6:Excelビューア

Excelビューア

結論

IronXL を使用して ASP.NET Excel ビューアーを作成しました。! この強力なライブラリにより、ユーザーはExcelファイルをより効率的かつ管理しやすい方法で操作できます。 IronXLを使用することで、.NET環境でのExcelファイルの取り扱いがこれまでになく簡単になります。

IronXL を提供します 無料試用前払い費用なしで、その膨大な機能性を探索し理解することができます。テストを行い、ニーズに完璧に合うソリューションであると確認した場合、ライセンスは $Lite License から開始します。

< 以前
C#でXLSをXLSXファイルに変換する方法
次へ >
C#でCSVファイルにデータを書き込む方法

準備はできましたか? バージョン: 2024.9 新発売

無料のNuGetダウンロード 総ダウンロード数: 977,734 View Licenses >