IRONXLの使用

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

更新済み 2024年3月31日
共有:

この包括的なチュートリアルでは、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を読み込んでくださいWorkBookIronXLを使用して、各列をループするワークシートそして、各 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ファイルにデータを書き込む方法