CSV(カンマ区切り値)ファイルは、アプリケーション間でデータをやり取りする際に、現在でも最も広く使用されている形式のひとつです。財務データ、ユーザー情報、分析レポートなどを扱う場合でも、C# で CSV ファイルを効率よく読み取ることは .NET 開発における一般的なタスクです。 CSV を読み込んだあと、データ加工や DB 保存まで行いたいケースも多いでしょう。 本ガイドでは、Spire.XLS for .NET を使用して C# で CSV ファイルを解析する方法を詳しく解説します。直接読み取りの方法と、CSV を DataTable に変換する方法の両方をカバーします。 C# 用 CSV 読み取りライブラリのインストール C# で CSV ファイルを読み取る C# で CSV を DataTable に変換する 各方法の使い分け よくある質問(FAQs) 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となります。