フッターコンテンツにスキップ
IRONXLの使用
C#でCSVからデータテーブルへインポートする方法 | IronXL

C#でCSVをデータテーブルにインポートする方法

Welcome to this beginner's tutorial on importing CSV (comma-separated values) files into a DataTable in C# using IronXL. このガイドでは、C# に不慣れな方でも、このプロセスを簡単に理解できるように、分かりやすいアプローチを提供します。 環境のセットアップからソースコードの記述に至るまで、すべてのステップをカバーします。 このチュートリアルの終わりには、CSV データを DataTable に変換する方法、DataTable の列を管理する方法、および C# を使用して CSV ドキュメントのさまざまな側面を処理する方法について明確に理解できるようになります。

前提条件

その前に、以下が準備されていることを確認してください。

  • C# の基本知識
  • ローカルコンピュータに Visual Studio がインストールされていること
  • NuGet パッケージマネージャーから入手できる IronXL ライブラリ

基本を理解する

CSV ファイルとは何ですか?

CSV ファイル(カンマ区切り値ファイル)は、特定の構造を用いて表形式のデータを整理するタイプのプレーンテキストファイルです。 CSV はシンプルでコンパクトであり、様々なプラットフォームで動作可能なので、データ交換の一般的な形式です。 CSV ファイルでは、データはカンマで区切られ、新しい行は新しい行を意味し、列ヘッダーは通常、最初の行にあります。

DataTable の理解

DataTable は C# の ADO.NET ライブラリの一部で、メモリ上のデータを表す単一のテーブルを表します。 これは、行と列から成り立ち、それぞれの列は異なるデータ型を持つことができます。 DataTables は非常に柔軟性があり、構造化された形式でデータを表すことができ、CSV ファイルデータの処理に最適です。

プロジェクトのセットアップ

手順 1: 新しい C# プロジェクトの作成

  1. Visual Studioを開きます。
  2. ファイル > 新規作成 > プロジェクト を選択します。
  3. C# コンソールまたは Windows フォーム アプリケーションを選択し、適切に名前を付けます。

手順 2: IronXL をインストールする

IronXL は、C# で Excel および CSV ファイルを操作するための強力なライブラリです。 使用するには、NuGet パッケージ マネージャーを介してインストールする必要があります。 Visual Studioで:

  1. ツール > NuGet パッケージ マネージャー > ソリューションの Nuge パッケージの管理 に移動します。
  2. IronXL.Excel を検索します。

CSV の DataTable へのインポート方法: 図 1 - IronXL

  1. パッケージをプロジェクトにインストールします。

IronXL を使用した CSV ファイルの DataTables への読み込み

手順 1: 環境のセッティング

using IronXL;
using System.Data;
using IronXL;
using System.Data;
Imports IronXL
Imports System.Data
$vbLabelText   $csharpLabel

これらの using ステートメントは、タスクに必要な名前空間を含みます。

手順 2: CSV をインポートするメソッドを作成する

CsvToDataTable クラスを定義し、ImportCsvToDataTable という静的メソッドを持つ。 このメソッドは、CSV ファイルを DataTable に変換する責任を持ちます。

public class CsvToDataTable
{
    public static DataTable ImportCsvToDataTable(string filePath)
    {
        // Code snippet to import CSV will be placed here
        return null; // Placeholder return statement
    }
}
public class CsvToDataTable
{
    public static DataTable ImportCsvToDataTable(string filePath)
    {
        // Code snippet to import CSV will be placed here
        return null; // Placeholder return statement
    }
}
Public Class CsvToDataTable
	Public Shared Function ImportCsvToDataTable(ByVal filePath As String) As DataTable
		' Code snippet to import CSV will be placed here
		Return Nothing ' Placeholder return statement
	End Function
End Class
$vbLabelText   $csharpLabel

手順 3: CSV ファイルを読み込む

ImportCsvToDataTable メソッド内で、CSV ファイルの読み込みを開始します。IronXL はこれを行うための簡単な方法を提供します。

// Load the CSV file
WorkBook workbook = WorkBook.LoadCSV(filePath);
// Load the CSV file
WorkBook workbook = WorkBook.LoadCSV(filePath);
' Load the CSV file
Dim workbook As WorkBook = WorkBook.LoadCSV(filePath)
$vbLabelText   $csharpLabel

WorkBook.LoadCSV は、CSV ファイルを読み込むための IronXL のメソッドです。 ここで、filePath は CSV ファイルへのパスです。

手順 4: CSV を DataTable に変換

読み込んだ CSV データを DataTable に変換します。 このステップは、データを C# アプリケーション内で簡単に操作し表示できる形式に変換するために重要です。

// Get the first worksheet
WorkSheet sheet = workbook.DefaultWorkSheet;
// Convert CSV worksheet to DataTable
DataTable dataTable = sheet.ToDataTable();
return dataTable;
// Get the first worksheet
WorkSheet sheet = workbook.DefaultWorkSheet;
// Convert CSV worksheet to DataTable
DataTable dataTable = sheet.ToDataTable();
return dataTable;
' Get the first worksheet
Dim sheet As WorkSheet = workbook.DefaultWorkSheet
' Convert CSV worksheet to DataTable
Dim dataTable As DataTable = sheet.ToDataTable()
Return dataTable
$vbLabelText   $csharpLabel

このスニペットは CSV データを DataTable に変換します。 DefaultWorkSheet は、ブックから最初のワークシートを取得します。CSV ファイルの場合、これは CSV データ全体と同等です。ToDataTable メソッドは、CSV データを効率的に DataTable 構造にマップする IronXL の強力な機能であり、CSV ファイルの最初の行に列ヘッダー行が含まれている場合も、これを含みます。

ステップ 5: メソッドをアプリケーションで使用する

今、アプリケーションで ImportCsvToDataTable メソッドを使用してください。 たとえば、このメソッドをアプリケーションの起動時や、ユーザーが CSV ファイルをアップロードした際に呼び出すことができます。

// Usage
string csvFilePath = "csvfile.csv";
DataTable dataTable = CsvToDataTable.ImportCsvToDataTable(csvFilePath);
// Usage
string csvFilePath = "csvfile.csv";
DataTable dataTable = CsvToDataTable.ImportCsvToDataTable(csvFilePath);
' Usage
Dim csvFilePath As String = "csvfile.csv"
Dim dataTable As DataTable = CsvToDataTable.ImportCsvToDataTable(csvFilePath)
$vbLabelText   $csharpLabel

このコードスニペットは、ImportCsvToDataTable メソッドを呼び出す方法を示しています。 実際の CSV ファイルのファイルパスに "csvfile.csv" を置き換えてください。

ステップ 6: 出力 DataTable の利用

一度 DataTable を入手したら、ユーザーインターフェースにデータを表示する、データをフィルタリングする、または処理するなどのさまざまな操作を行うことができます。 以下にいくつかの例を示します。

コンソールアプリケーションでデータを表示する

foreach (DataRow row in dataTable.Rows)
{
    foreach (var item in row.ItemArray)
    {
        Console.Write($"{item} ");
    }
    Console.WriteLine();
}
foreach (DataRow row in dataTable.Rows)
{
    foreach (var item in row.ItemArray)
    {
        Console.Write($"{item} ");
    }
    Console.WriteLine();
}
For Each row As DataRow In dataTable.Rows
	For Each item In row.ItemArray
		Console.Write($"{item} ")
	Next item
	Console.WriteLine()
Next row
$vbLabelText   $csharpLabel

このコードは、DataTable 内の各行と列を反復し、データをコンソールに表示します。

データのフィルタリング

LINQ を使用して DataTable のデータをフィルタリングすることができます。 たとえば、特定の列が特定の条件を満たす行を選択したい場合:

var filteredRows = dataTable.AsEnumerable()
                            .Where(row => row.Field<string>("ColumnName") == "SomeValue");
var filteredRows = dataTable.AsEnumerable()
                            .Where(row => row.Field<string>("ColumnName") == "SomeValue");
Dim filteredRows = dataTable.AsEnumerable().Where(Function(row) row.Field(Of String)("ColumnName") = "SomeValue")
$vbLabelText   $csharpLabel

"ColumnName""SomeValue" をフィルター条件に合わせて置き換えてください。

完全なコードスニペット

ここでは、プロジェクトで使用できる完全なソースコードを示します。

using IronXL;
using System;
using System.Data;
using System.IO;

public class CsvToDataTable
{
    public static DataTable ImportCsvToDataTable(string filePath)
    {
        // Check if the file exists
        if (!File.Exists(filePath))
        {
            throw new FileNotFoundException($"The file at {filePath} was not found.");
        }

        // Load the CSV file
        WorkBook workbook = WorkBook.LoadCSV(filePath);
        // Get the first worksheet
        WorkSheet sheet = workbook.DefaultWorkSheet;
        // Convert the worksheet to DataTable
        DataTable dataTable = sheet.ToDataTable();
        return dataTable;
    }
}

class Program
{
    static void Main(string[] args)
    {
        // Usage
        try
        {
            string filePath = "sample_data.csv"; // CSV file path
            DataTable dataTable = CsvToDataTable.ImportCsvToDataTable(filePath);
            foreach (DataRow row in dataTable.Rows)
            {
                foreach (var item in row.ItemArray)
                {
                    Console.Write($"{item} ");
                }
                Console.WriteLine();
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine($"An error occurred: {ex.Message}");
        }
    }
}
using IronXL;
using System;
using System.Data;
using System.IO;

public class CsvToDataTable
{
    public static DataTable ImportCsvToDataTable(string filePath)
    {
        // Check if the file exists
        if (!File.Exists(filePath))
        {
            throw new FileNotFoundException($"The file at {filePath} was not found.");
        }

        // Load the CSV file
        WorkBook workbook = WorkBook.LoadCSV(filePath);
        // Get the first worksheet
        WorkSheet sheet = workbook.DefaultWorkSheet;
        // Convert the worksheet to DataTable
        DataTable dataTable = sheet.ToDataTable();
        return dataTable;
    }
}

class Program
{
    static void Main(string[] args)
    {
        // Usage
        try
        {
            string filePath = "sample_data.csv"; // CSV file path
            DataTable dataTable = CsvToDataTable.ImportCsvToDataTable(filePath);
            foreach (DataRow row in dataTable.Rows)
            {
                foreach (var item in row.ItemArray)
                {
                    Console.Write($"{item} ");
                }
                Console.WriteLine();
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine($"An error occurred: {ex.Message}");
        }
    }
}
Imports IronXL
Imports System
Imports System.Data
Imports System.IO

Public Class CsvToDataTable
	Public Shared Function ImportCsvToDataTable(ByVal filePath As String) As DataTable
		' Check if the file exists
		If Not File.Exists(filePath) Then
			Throw New FileNotFoundException($"The file at {filePath} was not found.")
		End If

		' Load the CSV file
		Dim workbook As WorkBook = WorkBook.LoadCSV(filePath)
		' Get the first worksheet
		Dim sheet As WorkSheet = workbook.DefaultWorkSheet
		' Convert the worksheet to DataTable
		Dim dataTable As DataTable = sheet.ToDataTable()
		Return dataTable
	End Function
End Class

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		' Usage
		Try
			Dim filePath As String = "sample_data.csv" ' CSV file path
			Dim dataTable As DataTable = CsvToDataTable.ImportCsvToDataTable(filePath)
			For Each row As DataRow In dataTable.Rows
				For Each item In row.ItemArray
					Console.Write($"{item} ")
				Next item
				Console.WriteLine()
			Next row
		Catch ex As Exception
			Console.WriteLine($"An error occurred: {ex.Message}")
		End Try
	End Sub
End Class
$vbLabelText   $csharpLabel

Program.cs ファイルにこのコードを使用できます。運用環境で作業する場合、IronXL のライセンスを追加することを忘れないでください。

コードの出力

コードを実行すると、CSV ファイルがロードされ、そのデータが DataTable にインポートされます。 その後、コンソールで DataTable 列の内容が表示されます。 データが正しく DataTable にインポートされたことを確認するのに役立ちます。

CSV の DataTable へのインポート方法: 図 2 - 出力

さまざまなシナリオの処理

現実のシナリオでは、CSV ファイルは形式や構造において大きく異なることがあります。 これらの変動に対応することにより、アプリケーションを強化し多用途にすることが重要です。IronXL を使用して CSV データを DataTable にインポートする際に、さまざまなシナリオを管理する方法を検討してみましょう。

異なる区切り文字の処理

CSV ファイルのデフォルトの区切り文字はカンマです。 しかし、CSV ファイルが常にカンマで値を区切るとは限りません。 時には、セミコロン、タブ、または他の文字が区切り文字として使用されることがあります。 これを IronXL で処理するには:

カスタム区切り文字の指定: CSV ファイルを読み込む前に、ファイルの区切り文字を指定することができます。 たとえば、ファイルがセミコロン (;) を使用している場合、次のように設定することができます。

WorkBook workbook = WorkBook.LoadCSV(filePath, listDelimiter: ";");
WorkBook workbook = WorkBook.LoadCSV(filePath, listDelimiter: ";");
Dim workbook As WorkBook = WorkBook.LoadCSV(filePath, listDelimiter:= ";")
$vbLabelText   $csharpLabel

大規模な CSV ファイルの処理

大規模な CSV ファイルを扱う際には、メモリの使用量とパフォーマンスを考慮することが重要です。 IronXL は、ファイル全体を一度にメモリにロードせずに、効率的に大規模なファイルを処理するための方法を提供しています。 ファイルをチャンク単位で読み込む、または IronXL が提供するストリーミング API を利用してメモリ使用量を効果的に管理することができます。

結論

IronXL を使用して C# で CSV データを DataTable にインポートするのは簡単です。 それはアプリケーションのデータ操作機能を強化し、CSV ファイルを効率的に処理することができます。 このチュートリアルで紹介した手順を用いることで、初心者でも簡単にこの機能を C# プロジェクトに統合できます。

IronXL は、その機能を探求するための無料トライアルを提供しています。 より高度な機能とサポートを求める場合、ライセンスオプションも利用可能です。

よくある質問

C#でCSVデータをデータテーブルにインポートするにはどうすればよいですか?

CSVデータをC#のデータテーブルにインポートするには、IronXLのWorkBook.LoadCSVメソッドを使用してCSVファイルを読み込み、ToDataTableメソッドでデータテーブルに変換します。

IronXLを使用するためのVisual Studioプロジェクトのセットアップにはどのようなステップが必要ですか?

IronXLを使用するためのVisual Studioプロジェクトをセットアップするには、NuGetパッケージマネージャーを使用してIronXLパッケージをインストールします。ツール > NuGet パッケージ マネージャー > ソリューションのNuGetパッケージの管理に進み、IronXL.Excelを検索し、プロジェクトに追加します。

IronXLは異なるデリミタを持つCSVファイルを扱うことができますか?

はい、IronXLはWorkBook.LoadCSVメソッドでlistDelimiterパラメータを指定してカスタムデリミタを使用することで、異なるデリミタを持つCSVファイルを扱うことができます。

CSVファイルを読み込む際に「ファイルが見つかりません」というエラーが発生した場合、どうすれば良いですか?

「ファイルが見つかりません」というエラーに遭遇した場合、ファイルパスが正しいことを確認してください。File.Exists(filePath)を使用してファイルの存在を確認し、そのようなエラーを防ぎます。

C#で大きなCSVファイルを効率的に管理するにはどうすればよいですか?

大きなCSVファイルを効率的に管理するために、IronXLはチャンクでファイルを読み込む機能やストリーミングAPIを提供し、メモリ使用量とパフォーマンスを最適化するのに役立ちます。

CSVデータをデータテーブルに変換することの利点は何ですか?

CSVデータをデータテーブルに変換することで、構造化されたデータ操作が可能となり、C#アプリケーション内でデータを取り扱ったり、フィルタリングしたり、表示したりするのが容易になります。

C#コンソールアプリケーションでデータテーブルの内容を表示するにはどうすればよいですか?

C#コンソールアプリケーションでデータテーブルの内容を表示するには、各DataRowを反復処理し、ネストされたループを使用してコンソールにデータを表示することで、各項目を印刷します。

CSVファイルとは何ですか、そしてなぜ役に立つのですか?

CSVファイル、またはカンマ区切り値ファイルは、データをカンマで区切るプレーンテキストファイルです。そのシンプルさと多くのアプリケーションとの互換性から、データ交換に広く使用されています。

データテーブルへのCSVインポートに関するチュートリアルをフォローするための前提条件は何ですか?

チュートリアルをフォローするには、C#の基本的な理解、マシンにインストールされたVisual Studio、およびNuGet パッケージ マネージャーを介して取得できるIronXLライブラリが必要です。

Curtis Chau
テクニカルライター

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

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