
CSV(カンマ区切り値)ファイルは、アプリケーション間でデータをやり取りする際に、現在でも最も広く使用されている形式のひとつです。財務データ、ユーザー情報、分析レポートなどを扱う場合でも、C# で CSV ファイルを効率よく読み取ることは .NET 開発における一般的なタスクです。
CSV を読み込んだあと、データ加工や DB 保存まで行いたいケースも多いでしょう。
本ガイドでは、Spire.XLS for .NET を使用して C# で CSV ファイルを解析する方法を詳しく解説します。直接読み取りの方法と、CSV を DataTable に変換する方法の両方をカバーします。
C# 用 CSV 読み取りライブラリのインストール
Spire.XLS は主に Excel ファイル向けのライブラリですが、.NET 用の CSV リーダーとしても利用できます。CSV ファイルに対する優れたサポートを備えており、効率的かつシンプルに処理できます。
まずは、プロジェクトに Spire.XLS パッケージをインストールします。手順は以下の通りです:
- Visual Studio でプロジェクトを開く
- ソリューションエクスプローラーでプロジェクトを右クリック
- NuGet パッケージの管理を選択
- Spire.XLS を検索
- インストールをクリック
または、パッケージマネージャーコンソールから次のコマンドを実行することも可能です:
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 データがタブ区切り形式でコンソールに出力されます。

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.Count と Rows.Count により、データサイズを確認できます。
- 列名とデータ出力:列ヘッダーおよび各行のデータを順に出力します。
結果:列情報・ヘッダー・行データを含む構造化された出力が得られます。

データの分析・計算・フォーマットを行う場合は、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となります。






