チュートリアル

簡単にライブラリーを使用するためのチュートリアルコレクション

チュートリアル».NET»Spire.XLS for .NET»文書操作»C# で CSV ファイルを読み取る方法:基本的な解析と DataTable への変換
2026-04-20

C# で CSV ファイルを読み取る方法:基本的な解析と DataTable への変換

C#/.NET で CSV ファイルを読み取り・解析する

CSV(カンマ区切り値)ファイルは、アプリケーション間でデータをやり取りする際に、現在でも最も広く使用されている形式のひとつです。財務データ、ユーザー情報、分析レポートなどを扱う場合でも、C# で CSV ファイルを効率よく読み取ることは .NET 開発における一般的なタスクです。

CSV を読み込んだあと、データ加工や DB 保存まで行いたいケースも多いでしょう。

本ガイドでは、Spire.XLS for .NET を使用して C# で CSV ファイルを解析する方法を詳しく解説します。直接読み取りの方法と、CSV を DataTable に変換する方法の両方をカバーします。

C# 用 CSV 読み取りライブラリのインストール

Spire.XLS は主に Excel ファイル向けのライブラリですが、.NET 用の CSV リーダーとしても利用できます。CSV ファイルに対する優れたサポートを備えており、効率的かつシンプルに処理できます。

まずは、プロジェクトに Spire.XLS パッケージをインストールします。手順は以下の通りです:

  1. Visual Studio でプロジェクトを開く
  2. ソリューションエクスプローラーでプロジェクトを右クリック
  3. NuGet パッケージの管理を選択
  4. Spire.XLS を検索
  5. インストールをクリック

または、パッケージマネージャーコンソールから次のコマンドを実行することも可能です:

PM> Install-Package Spire.XLS

これにより、Spire.XLS を利用するために必要な依存関係がプロジェクトに追加されます。

C# で CSV ファイルを読み取る

まずは基本から始めましょう。C#でCSVファイルを読み取る最もシンプルな方法を紹介します。以下のコードでは、CSV ファイルを読み込み、データを取得し、コンソールに表形式で出力します。

「sample.csv」は実際のファイルパスに置き換えてください。

using Spire.Xls;

namespace ReadCSV
{
    class Program
    {
        static void Main(string[] args)
        {
            // Workbook インスタンスを作成
            Workbook workbook = new Workbook();

            // CSV ファイルを読み込む
            workbook.LoadFromFile("sample.csv", ",");

            // 最初のワークシートを取得
            Worksheet sheet = workbook.Worksheets[0];

            // 使用範囲を取得
            CellRange range = sheet.AllocatedRange;

            // 行と列をループ処理
            for (int row = 1; row <= range.RowCount; row++)
            {
                for (int col = 1; col <= range.ColumnCount; col++)
                {
                    // セルの値を取得
                    string cellValue = range[row, col].Value;
                    Console.Write(cellValue + "\t");
                }
                Console.WriteLine();
            }

            Console.ReadLine();
        }
    }
}

解説:

  • Workbook クラス:CSV ファイルをメモリ上で管理する「コンテナ」として機能します。CSV は完全な Excel ファイルではありませんが、Spire.Xls は一貫性のために単一シートのブックとして扱います。

  • Workbook.LoadFromFile():CSV ファイルを読み込みます。

    • ファイルパス:"sample.csv"
    • 区切り文字:","(CSV のデフォルト)
  • Worksheet.AllocatedRange:データが含まれているセル範囲のみを取得します。

  • CellRange[row, col].Value:指定したセルの値を取得します。

結果:CSV データがタブ区切り形式でコンソールに出力されます。

C#:CSV を読み込む

VB.NET でのサンプルが必要な場合は、C# コードを VB.NET コンバーターで変換してください。

C# で CSV を DataTable に変換する方法

C# で CSV データを扱う場合、DataTable は .NET における柔軟なインメモリデータ構造で、フィルタリング・並び替え・UI バインドなどのデータ操作を簡単に行えます。

以下は、Spire.XLS を使用して CSV データを DataTable に読み込む方法です:

using Spire.Xls;
using System.Data;

namespace ReadCSV
{
    class Program
    {
        static void Main(string[] args)
        {
            // Workbook インスタンスを作成
            Workbook workbook = new Workbook();

            // CSV ファイルを読み込む
            workbook.LoadFromFile("sample.csv", ",");

            // 最初のワークシートを取得
            Worksheet worksheet = workbook.Worksheets[0];

            // ワークシートのデータを DataTable にエクスポート
            DataTable dataTable = worksheet.ExportDataTable();

            // 行数と列数を取得
            Console.WriteLine("\n変換完了!DataTable の情報:");
            Console.WriteLine($"列数: {dataTable.Columns.Count}");
            Console.WriteLine($"行数: {dataTable.Rows.Count}");
            Console.WriteLine();

            // 列名を出力
            for (int i = 0; i < dataTable.Columns.Count; i++)
            {
                Console.Write(dataTable.Columns[i].ColumnName + "  | ");
            }
            Console.WriteLine();
            Console.WriteLine("----------------------------------------------------------");

            // 行データを出力
            for (int i = 0; i < dataTable.Rows.Count; i++)
            {
                for (int j = 0; j < dataTable.Columns.Count; j++)
                {                
                    string value = dataTable.Rows[i][j].ToString();
                    Console.Write(value + "\t");
                }
                Console.WriteLine(); 
            }
        }
    }
}

解説:

  • Worksheet.ExportDataTable():CSV 全体を DataTable に変換します。
  • メタデータ取得Columns.CountRows.Count により、データサイズを確認できます。
  • 列名とデータ出力:列ヘッダーおよび各行のデータを順に出力します。

結果:列情報・ヘッダー・行データを含む構造化された出力が得られます。

C#:CSV を DataTable に変換する

データの分析・計算・フォーマットを行う場合は、CSV を Excel に変換する方法も有効です。

各方法の使い分け

目的に応じて最適な方法を選びましょう:

方法 適した用途 使用例
CSV の直接読み取り 簡易確認 CSV が正しく読み込まれているか確認
DataTable への変換 高度なデータ処理 フィルタ、並び替え、SQL Server への保存

まとめ

Spire.XLS for .NET を使用すれば、C# での CSV ファイル読み取りやデータ処理が非常にシンプルになります。また、DataTable への変換により、柔軟なデータ操作も可能になります。

小規模データから大規模ファイルまで、Spire.XLS はさまざまなニーズに対応できる柔軟なソリューションを提供します。

本記事のコードはそのまま使用可能です。コピーして CSV ファイルのパスを調整するだけで動作します。さらに高度な機能については、公式ドキュメントをご参照ください。

よくある質問(FAQs)

Q1: なぜ CSV 読み取りに Spire.XLS を使うのですか?

A: .NET Framework には StreamReader などの標準機能もありますが、Spire.XLS には以下の利点があります:

  • 依存関係なし:Microsoft Excel や Office のインストールが不要
  • 高パフォーマンス:大規模 CSV ファイルの処理に最適化
  • 柔軟性:用途に応じて複数の読み取り方法を選択可能
  • クロスプラットフォーム:.NET Framework / .NET Core / .NET Standard / Mono に対応

Q2: 区切り文字を変更できますか?(セミコロンやタブなど)

A: はい。LoadFromFile() メソッドの2番目のパラメータを区切り文字に置き換えてください。

// タブ区切り
workbook.LoadFromFile("data.txt", "\t");

// セミコロン区切り
workbook.LoadFromFile("data.csv", ";");

// パイプ区切り
workbook.LoadFromFile("data.csv", "|");

Q3: CSV の特定の行や列だけを読み取れますか?

A: はい。正確な行と列の範囲を定義することで、データの特定のサブセットを対象にできます。これは、ファイル全体を処理せずに特定の情報(ヘッダーをスキップする、関連する列に焦点を当てるなど)を抽出するのに役立ちます。

// 範囲を指定
int startRow = 2;   // 2行目から(ヘッダーをスキップ)
int endRow = 4;
int startCol = 2;
int endCol = 6;

// ループ処理
for (int row = startRow; row <= endRow; row++)
{
   for (int col = startCol; col <= endCol; col++)
   {
      string cellValue = worksheet.Range[row, col].Value;
      Console.Write(cellValue + "\t"); 
   }
}

注意:Spire.XLS は(Excel と同様に)1ベースのインデックスを使用するため、最初の行/列は(0ではなく)1となります。

Read 10 times