フッターコンテンツにスキップ
他のコンポーネントと比較する

EPPlusでExcelをDataTableに読み込むC#(IronXLチュートリアル)

C#でDataTableにExcelデータを読み込むExcelライブラリを探していますか?

C#でExcelファイルをDataTableに読み込むことは、データ分析とレポーティング、データベースへのデータインポート、データ移行、データ検証とクリーニング、他のシステムとの統合、自動化、およびバッチ処理など、さまざまな業界や分野で多くの実用的な用途があります。

この記事では、C#の.NET Core向けの2つの異なるExcelライブラリを比較し、ExcelデータおよびExcelファイルをDataTableに読み込む機能を提供する方法を説明します。 ライブラリは

  1. EPPlus
  2. IronXL

1. EPPlusライブラリ

EPPlusは、C#でExcelファイルを作成および操作するための強力なオープンソースライブラリです。 このライブラリは、サーバーやクライアントマシンにMicrosoft OfficeやExcelのインストールを必要とせずに、Excelスプレッドシートをプログラム的に生成、読み込み、変更するためのシンプルで直感的なAPIを提供します。 EPPlusを使用すると、ワークシートの作成、データの追加、フォーマットの適用、チャートの作成、その他のExcelファイルに対する操作が簡単に行えます。 古い.xls形式と新しい.xlsx形式の両方に対応しており、効率的なパフォーマンスとメモリ管理を提供します。 動的なレポートの生成、データのインポート/エクスポート、Excel関連タスクの自動化が必要な場合、EPPlusはC#アプリケーションでのExcelファイルの取り扱いを簡素化する包括的な機能と能力を提供します。

2. IronXL

IronXLは、.NETアプリケーション内でExcelファイルを簡単に読み書きし操作する能力を開発者に提供する強力で多用途なライブラリです。 直感的で包括的なAPIにより、IronXLはスプレッドシートの操作が従来は複雑だったプロセスを簡素化し、データの抽出、計算の実行、チャートの作成、レポートの生成をスムーズに行えるようにします。 データのインポート/エクスポート自動化、データ分析、動的なExcelテンプレートの作成において、IronXLは開発者の貴重な時間と労力を節約しながら、Excelデータの取り扱いの正確性と信頼性を確保する堅牢なソリューションを提供します。 シームレスな統合、広範なドキュメント、および多様な機能範囲を持つIronXLは、Excelファイルの操作に関連する課題を克服したい開発者のための信頼性と効率性を持ったツールとして最適な選択肢となります。

3. EPPlusライブラリのインストール

C#プロジェクトにEPPlusライブラリをインストールするには、まずVisual Studioで新しいコンソールベースのプロジェクトを作成する必要があります。 その後、NuGetパッケージマネージャーを使用して簡単にインストールできます。

新しいプロジェクトを作成したら、ツールに移動し、NuGetパッケージマネージャーにホバーした後、「ソリューション用のNuGetパッケージの管理」を選択します。

新しいウィンドウが表示されます。 この新しいウィンドウで、「参照」オプションに行き、「EPPlus」を検索します。 パッケージのリストが表示され、最新の安定版を選択する必要があります。 その後、右側の「インストール」ボタンをクリックしてEPPlusライブラリをインストールします。

これで、EPPlusがプロジェクトに追加されます。

4. IronXLのインストール

IronXLをインストールする方法はいくつかありますが、このセクションではNuGetパッケージマネージャーを使用したIronXLのインストールのみを説明します。

セクション3と同様に、新しいプロジェクトを作成し、「ツール」に移動して、ソリューション用のNuGetパッケージマネージャーを開きます。

新しいウィンドウで、検索バーに「IronXL」というキーワードを入力します。 リストが表示され、インストールしたいIronXLパッケージを選択できます。 その後、「インストール」ボタンをクリックしてプロジェクトにIronXLをインストールします。

これでIronXLは使用可能です。

5. EPPlusライブラリを使用してExcelファイルとデータをDataTableに読み込む

このセクションでは、C#EPPlusパッケージのExcelライブラリを使用して、ExcelをDataTableとして読み込むコードを検討します。

DataTableとして読み込むためのサンプルExcelファイルが必要です。 その目的のために、サンプルのExcelファイルを生成します。

以下はExcelファイルをDataTableとして読み込むためのコードです。

using OfficeOpenXml;
using System;
using System.Data;
using System.IO;

class Program
{
    static void Main(string[] args)
    {
        var path = @"sample.xlsx"; // Specify the path to your Excel file
        var data = ExcelDataToDataTable(path, "Table");

        // Iterate through each row in the DataTable and print its contents
        foreach (DataRow row in data.Rows)
        {
            foreach (var wsrow in row.ItemArray)
            {
                Console.Write(wsrow + " ");
            }
            Console.WriteLine();
        }
    }

    /// <summary>
    /// Converts Excel sheet data to a DataTable.
    /// </summary>
    /// <param name="filePath">The path to the Excel file.</param>
    /// <param name="sheetName">The name of the worksheet to read from.</param>
    /// <param name="hasHeader">Indicates whether the Excel sheet has a header row.</param>
    /// <returns>DataTable containing Excel data.</returns>
    public static DataTable ExcelDataToDataTable(string filePath, string sheetName, bool hasHeader = true)
    {
        DataTable dt = new DataTable();
        var fi = new FileInfo(filePath);

        // Check if the file exists
        if (!fi.Exists)
            throw new Exception("File " + filePath + " does not exist.");

        // Set the license context for EPPlus
        ExcelPackage.LicenseContext = LicenseContext.NonCommercial;

        // Load the Excel file into an EPPlus ExcelPackage
        using (var xlPackage = new ExcelPackage(fi))
        {
            // Get the specified worksheet from the workbook
            var worksheet = xlPackage.Workbook.Worksheets[sheetName];

            // Convert the worksheet to a DataTable, optionally using the first row as column names
            dt = worksheet.Cells[1, 1, worksheet.Dimension.End.Row, worksheet.Dimension.End.Column].ToDataTable(c =>
            {
                c.FirstRowIsColumnNames = hasHeader;
            });
        }

        return dt;
    }
}
using OfficeOpenXml;
using System;
using System.Data;
using System.IO;

class Program
{
    static void Main(string[] args)
    {
        var path = @"sample.xlsx"; // Specify the path to your Excel file
        var data = ExcelDataToDataTable(path, "Table");

        // Iterate through each row in the DataTable and print its contents
        foreach (DataRow row in data.Rows)
        {
            foreach (var wsrow in row.ItemArray)
            {
                Console.Write(wsrow + " ");
            }
            Console.WriteLine();
        }
    }

    /// <summary>
    /// Converts Excel sheet data to a DataTable.
    /// </summary>
    /// <param name="filePath">The path to the Excel file.</param>
    /// <param name="sheetName">The name of the worksheet to read from.</param>
    /// <param name="hasHeader">Indicates whether the Excel sheet has a header row.</param>
    /// <returns>DataTable containing Excel data.</returns>
    public static DataTable ExcelDataToDataTable(string filePath, string sheetName, bool hasHeader = true)
    {
        DataTable dt = new DataTable();
        var fi = new FileInfo(filePath);

        // Check if the file exists
        if (!fi.Exists)
            throw new Exception("File " + filePath + " does not exist.");

        // Set the license context for EPPlus
        ExcelPackage.LicenseContext = LicenseContext.NonCommercial;

        // Load the Excel file into an EPPlus ExcelPackage
        using (var xlPackage = new ExcelPackage(fi))
        {
            // Get the specified worksheet from the workbook
            var worksheet = xlPackage.Workbook.Worksheets[sheetName];

            // Convert the worksheet to a DataTable, optionally using the first row as column names
            dt = worksheet.Cells[1, 1, worksheet.Dimension.End.Row, worksheet.Dimension.End.Column].ToDataTable(c =>
            {
                c.FirstRowIsColumnNames = hasHeader;
            });
        }

        return dt;
    }
}
Imports OfficeOpenXml
Imports System
Imports System.Data
Imports System.IO

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		Dim path = "sample.xlsx" ' Specify the path to your Excel file
		Dim data = ExcelDataToDataTable(path, "Table")

		' Iterate through each row in the DataTable and print its contents
		For Each row As DataRow In data.Rows
			For Each wsrow In row.ItemArray
				Console.Write(wsrow & " ")
			Next wsrow
			Console.WriteLine()
		Next row
	End Sub

	''' <summary>
	''' Converts Excel sheet data to a DataTable.
	''' </summary>
	''' <param name="filePath">The path to the Excel file.</param>
	''' <param name="sheetName">The name of the worksheet to read from.</param>
	''' <param name="hasHeader">Indicates whether the Excel sheet has a header row.</param>
	''' <returns>DataTable containing Excel data.</returns>
	Public Shared Function ExcelDataToDataTable(ByVal filePath As String, ByVal sheetName As String, Optional ByVal hasHeader As Boolean = True) As DataTable
		Dim dt As New DataTable()
		Dim fi = New FileInfo(filePath)

		' Check if the file exists
		If Not fi.Exists Then
			Throw New Exception("File " & filePath & " does not exist.")
		End If

		' Set the license context for EPPlus
		ExcelPackage.LicenseContext = LicenseContext.NonCommercial

		' Load the Excel file into an EPPlus ExcelPackage
		Using xlPackage = New ExcelPackage(fi)
			' Get the specified worksheet from the workbook
			Dim worksheet = xlPackage.Workbook.Worksheets(sheetName)

			' Convert the worksheet to a DataTable, optionally using the first row as column names
			dt = worksheet.Cells(1, 1, worksheet.Dimension.End.Row, worksheet.Dimension.End.Column).ToDataTable(Sub(c)
				c.FirstRowIsColumnNames = hasHeader
			End Sub)
		End Using

		Return dt
	End Function
End Class
$vbLabelText   $csharpLabel

上記のコードは、ファイルパスやシート名などの入力パラメータを受け取り、DataTableを出力として返すメソッドを定義しています。 また、DataTableの各行を反復処理してデータを印刷します。

5.1. 出力

出力はExcelファイルの内容がコンソールに印刷されることになります。

6. IronXLを使用してExcelファイルをDataTableとして読み込む

Excelシートを変換してDataTableとして読み込むことは、IronXLを使用することで非常に簡単で、ほんの数行のコードで行えます。 さらに、以前のExcelファイルを入力として使用します。

次のコード例は、上記のコードと同じ機能を実行しますが、IronXLを使用します。

using IronXL;
using System;
using System.Data;

class Program
{
    static void Main(string[] args)
    {
        // Load the Excel file into an IronXL WorkBook
        WorkBook workBook = WorkBook.Load("sample.xlsx");

        // Get the default worksheet from the workbook
        WorkSheet workSheet = workBook.DefaultWorkSheet;

        // Convert the worksheet to a DataTable, specifying that the first row contains column names
        DataTable table = workSheet.ToDataTable(true);

        // Iterate through each row in the DataTable and print its contents
        foreach (DataRow row in table.Rows)
        {
            foreach (var cell in row.ItemArray)
            {
                Console.Write(cell + " ");
            }
            Console.WriteLine();
        }
    }
}
using IronXL;
using System;
using System.Data;

class Program
{
    static void Main(string[] args)
    {
        // Load the Excel file into an IronXL WorkBook
        WorkBook workBook = WorkBook.Load("sample.xlsx");

        // Get the default worksheet from the workbook
        WorkSheet workSheet = workBook.DefaultWorkSheet;

        // Convert the worksheet to a DataTable, specifying that the first row contains column names
        DataTable table = workSheet.ToDataTable(true);

        // Iterate through each row in the DataTable and print its contents
        foreach (DataRow row in table.Rows)
        {
            foreach (var cell in row.ItemArray)
            {
                Console.Write(cell + " ");
            }
            Console.WriteLine();
        }
    }
}
Imports IronXL
Imports System
Imports System.Data

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		' Load the Excel file into an IronXL WorkBook
		Dim workBook As WorkBook = WorkBook.Load("sample.xlsx")

		' Get the default worksheet from the workbook
		Dim workSheet As WorkSheet = workBook.DefaultWorkSheet

		' Convert the worksheet to a DataTable, specifying that the first row contains column names
		Dim table As DataTable = workSheet.ToDataTable(True)

		' Iterate through each row in the DataTable and print its contents
		For Each row As DataRow In table.Rows
			For Each cell In row.ItemArray
				Console.Write(cell & " ")
			Next cell
			Console.WriteLine()
		Next row
	End Sub
End Class
$vbLabelText   $csharpLabel

上記のコード例では、単にExcelファイルをロードし、workSheet.ToDataTable(true)メソッドを使用してDataTableに変換しています。

6.1 出力

出力はExcelファイルの内容がコンソールに印刷されることになります。

7. 結論

結論として、C#でExcelファイルを読み取り、それをDataTableに変換する際、EPPlusもIronXLも強力な機能を提供し、プロセスを簡素化する優れたライブラリです。

EPPlusは、プログラム的にExcelスプレッドシートを生成、読み込み、修正する簡潔なAPIを提供するオープンソースのライブラリです。 .xls形式と.xlsx形式の両方をサポートし、効率的なパフォーマンスとメモリ管理を提供します。

一方、IronXLは、.NETアプリケーションでExcelファイルを簡単に扱えるようにする多用途なライブラリです。 直感的なAPIと包括的な機能を提供し、データの抽出、計算の実行、チャートの作成、レポートの生成を可能にします。 IronXLは、データのインポート/エクスポート、データ分析、動的テンプレートの作成など、複雑なExcelファイルの操作タスクを簡素化します。

IronXLとEPPlusのコード例を比較すると、EPPlusのコードはかなり長く、複雑で読みづらいことがわかります。 一方、IronXLのコードは非常にシンプルで読みやすいです。 IronXLはデフォルトのワークシートを使用しますが、EPPlusではワークシートの名前を指定する必要があります。 そうでなければ、エラーが発生します。

まとめると、Excelファイルの操作やDataTableとしての読み取りに関しては、EPPlusよりもIronXLをお勧めします。 また、IronXLはEPPlusよりもシンプルなコードでExcelファイルを扱う際の機能を多く提供しています。 IronXLのチュートリアルの詳細については、次のリンクをご覧ください。

ご注意EPPlusはその権利保有者の登録商標です。 このサイトは、EPPlusとは提携しておらず、賛同、または後援されていません。] すべての製品名、ロゴ、およびブランドは各所有者の所有物です。 比較は情報提供のみを目的としており、執筆時点で公開されている情報を反映しています。

よくある質問

Excel データを C# の DataTable に読み込むにはどうすればいいですか?

IronXL を使用して、Excel ワークブックを WorkBook.Load() で読み込み、ワークシートにアクセスし、データを変換するには ToDataTable() を使用して Excel データを DataTable に読み込むことができます。

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

IronXL は Excel ファイル操作を簡素化するシンプルで直感的な API を提供します。データ抽出、計算、チャート作成、レポート生成の機能を含み、開発者にとって包括的なソリューションとなります。

IronXL は .xls と .xlsx ファイル形式をサポートしていますか?

はい、IronXL は .xls と .xlsx の両方のファイル形式をサポートしており、異なるタイプの Excel ファイルで作業する柔軟性を提供します。

Microsoft OfficeがインストールされていなくてもIronXLを使用できますか?

はい、IronXL はコンピュータに Microsoft Office や Excel がインストールされていなくても Excel ファイルを操作できます。

IronXL を .NET プロジェクトにインストールするにはどうすればいいですか?

IronXL をインストールするには、.NET プロジェクトで NuGet パッケージマネージャを開き、「IronXL」を検索してパッケージをインストールします。これにより IronXL がプロジェクトに追加され、その機能を使い始めることができます。

Excel ファイルを DataTable に読み込む際の一般的な問題とそれらのトラブルシューティング方法は何ですか?

一般的な問題には、ファイルパスが正しくない、サポートされていない形式、または不適切にフォーマットされたデータが含まれます。ファイルパスが正しいこと、形式がサポートされていること、データがクリーンであることを確認してください。IronXL はこれらの問題をトラブルシュートするのに役立つ明確なエラーメッセージを提供します。

IronXL と EPPlus の比較: Excel ファイルを DataTable に読み込む場合の違いは何ですか?

IronXL はその使いやすさと包括的な機能で知られていますが、EPPlus も効果的ですが、実装がより複雑な場合があります。IronXL は開発者にとってより簡単な API を提供します。

IronXLは大規模なExcelファイルに適していますか?

はい、IronXL は大規模な Excel ファイルを効率的に処理するよう設計されており、ファイル操作中のパフォーマンスとメモリ使用を最適化する機能を提供します。

IronXL はデータ分析とレポートに使用できますか?

もちろん、IronXL はデータ分析とレポートに最適であり、データの抽出と操作、チャート作成、およびレポート生成のための堅牢な機能を提供します。

開発者に利益をもたらす IronXL の主要な機能は何ですか?

IronXL の主要な機能には、シームレスなデータ抽出、強力な計算機能、簡単なチャート作成、効率的なレポート生成、Excel ファイル形式の広範なサポートが含まれます。

Curtis Chau
テクニカルライター

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

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