フッターコンテンツにスキップ
IRONXLの使用

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

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

IronXLとは?

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

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を表示する方法、Figure 1: Visual Studioで新しいASP.NET Webアプリケーションを作成 Visual Studioで新しいASP.NET Webアプリケーションを作成

  1. プロジェクトにExcelViewerと名付け、プロジェクトの位置を選択して作成ボタンをクリックします。

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

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

プロジェクトにIronXLを追加

Excelファイル形式(.xls、.xlsx、.csvなど)を扱うために、IronXLはExcelドキュメントの読み込み、読み取り、書き込み、さらにはExcelデータの変更に関する包括的な機能を提供します。 それは、式、画像、フォーマットなどをサポートします。

  1. ソリューションエクスプローラーでプロジェクトを右クリックし、NuGetパッケージの管理をナビゲート。
  2. NuGetパッケージマネージャーIronXL.Excelを検索。
  3. インストールをクリックして、プロジェクトに追加します。

ASP.NETでExcelを表示する方法、Figure 3: NuGetパッケージマネージャーUIでIronXLパッケージを検索してインストール NuGetパッケージマネージャUIでIronXLパッケージを検索してインストールする

パッケージマネージャーコンソールを使用して以下のコマンドでIronXLをインストールすることもできます。

Install-Package IronXL.Excel

ASP.NETでExcelを表示する方法、Figure 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は2つのプロパティ、SheetNameDataで定義されています。 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; }  // 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文字列、および取得されたExcelデータを格納するList<ExcelModel>を持っています。

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. ExcelModelExcelViewModelExcelDataリストに追加されます。

次のExcelファイルのデータが読み込まれて表示されます:

ASP.NETでExcelを表示する方法、Figure 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を表示する方法、Figure 6: Excelビューア Excelビューア

結論

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

IronXL provides a 無料トライアルを提供しており、先行コストなしでその広範な機能を探索し理解することができます。一度それをテストして、あなたのニーズに完璧なソリューションであると判断したら、ライセンスは$799から始まります。

よくある質問

ASP.NET MVC を使用して Excel ビューアを作成するにはどうすればよいですか?

Visual Studio で新しいプロジェクトを設定し、NuGet パッケージ マネージャーを介して IronXL ライブラリを追加することで、ASP.NET MVC を使用して Excel ビューアを作成できます。これにより、Excel ファイルを Web アプリケーションに直接読み込んで表示および操作できます。

Excel ファイルを処理するための ASP.NET MVC プロジェクトを設定する手順は何ですか?

Excel ファイルを処理するための ASP.NET MVC プロジェクトを設定するには、Visual Studio を開き、新しい ASP.NET Web アプリケーションプロジェクトを作成し、NuGet 経由で IronXL ライブラリをインストールします。次に、Excel データを管理するために ExcelModelExcelViewModel のようなモデルを実装し、ExcelController を使用して Excel ファイルをロードおよび処理します。

ASP.NET アプリケーションで複数の Excel シートを表示できますか?

はい、ASP.NET アプリケーションで複数の Excel シートを表示できます。IronXL を使用して Excel ファイルを読み込み、Bootstrap の nav-tabs を使用して各シートのために別々のタブを作成し、データを表形式で表示します。

ASP.NET で .NET ライブラリを使用して Excel ファイルをロードおよび処理するにはどうすればよいですか?

ASP.NET では、IronXL の WorkBook.Load メソッドを使用して Excel ファイルをロードおよび処理できます。このメソッドを使用して、Excel ファイルを読み取り、そのワークシートを反復処理し、表示またはさらなる操作のためにデータを抽出できます。

Excel 操作に IronXL を使用する利点は何ですか?

IronXL は、さまざまな Excel ファイル形式のサポート、画像や条件付き書式設定などの複雑な Excel 機能を操作する機能、サーバーに Microsoft Excel をインストールする必要がないという利点を提供します。

ASP.NET Excel ビューアを作成する際に一般的な問題を解決するにはどうすればよいですか?

ASP.NET Excel ビューアを作成する際の一般的な問題は、NuGet 経由で IronXL ライブラリが正しくインストールされていることを確認し、すべての必要なモデルとコントローラーが正しく実装されていること、および Excel ファイルがサポートされている形式にあることを確認することによって解決できます。

ASP.NET Web ページから直接 Excel ファイルを編集することは可能ですか?

はい、IronXL を使用して、ASP.NET Web ページから直接 Excel ファイルを編集できます。ライブラリを使用して Excel ファイルを Web アプリケーションに読み込み、データを変更し、変更をファイルにシームレスに保存できます。

IronXL は、Excel ファイルの読み取りと書き込みの両方をサポートしていますか?

はい、IronXL は、Excel ファイルの読み取りと書き込みの両方をサポートしています。既存の Excel ドキュメントからデータを読み取り、新しいデータや変更を XLS、XLSX、CSV などのさまざまな形式の Excel ファイルに書き込むことができます。

ASP.NET MVC アプリケーションで Excel データを管理するために作成するモデルは何ですか?

ASP.NET MVC アプリケーションでは、個々の Excel シートを表すために ExcelModel のようなモデルを作成し、シートのコレクションを管理し、ファイルのアップロードやメッセージングを処理するために ExcelViewModel を作成します。

購入前に IronXL の機能をテストするにはどうすればよいですか?

彼らのウェブサイトで利用可能な無料トライアル版をダウンロードすることで IronXL の機能をテストできます。このトライアルにより、最初の費用をかけずに .NET アプリケーション内で Excel ファイルを処理するためのライブラリの機能を探索できます。

Curtis Chau
テクニカルライター

Curtis Chauは、カールトン大学でコンピュータサイエンスの学士号を取得し、Node.js、TypeScript、JavaScript、およびReactに精通したフロントエンド開発を専門としています。直感的で美しいユーザーインターフェースを作成することに情熱を持ち、Curtisは現代のフレームワークを用いた開発や、構造の良い視覚的に魅力的なマニュアルの作成を楽しんでいます。

開発以外にも、CurtisはIoT(Internet of Things)への強い関心を持ち、ハードウェアとソフトウェアの統合方法を模索しています。余暇には、ゲームをしたりDiscordボットを作成したりして、技術に対する愛情と創造性を組み合わせています。