フッターコンテンツにスキップ
IRONXLの使用

C#でIronXLを使ってCSVファイルを読み込む方法

IronXLを使えば、C# .NETでCSVファイルを読み込むのは非常に簡単になります。単一のメソッド呼び出しで、カスタム解析コードを一切記述することなく、カンマ区切りのデータを構造化されたワークブックに読み込むことができます。 このガイドでは、基本的なデータ読み込み、カスタム区切り文字、データテーブルの変換、セルレベルのアクセス、エラー処理、Excel形式へのエクスポートなど、必要なすべてのテクニックを解説します。

.NETでCSVファイルを読む最も簡単な方法は何ですか?

最も簡単な方法は、 WorkBook.LoadCSVを使用して CSV データをワークブック構造に直接インポートすることです。 この単一のメソッドは、解析、区切り文字の検出、およびデータの整理を自動的に処理します。StreamReader を作成したり、各文字列行を手動で処理したりする必要はありません。

IronXLはVisual StudioのNuGetパッケージマネージャーコンソールからインストールしてください。 .NET プロジェクトを開いて実行してください:

Install-Package IronXL
dotnet add package IronXL
Install-Package IronXL
dotnet add package IronXL
SHELL

. .NETで CSV を読み込む: IronXLを使用した最もシンプルな C# アプローチ: 画像 1 - インストール

using IronXL;

// Load CSV file into a workbook with one method call
WorkBook workbook = WorkBook.LoadCSV("sales_data.csv", fileFormat: ExcelFileFormat.XLSX, listDelimiter: ",");
// Access the default worksheet containing CSV data
WorkSheet sheet = workbook.DefaultWorkSheet;
// Display all rows and CSV columns
foreach (var row in sheet.Rows)
{
    foreach (var cell in row)
    {
        Console.Write(cell.Value + "\t");
    }
    Console.WriteLine();
}
using IronXL;

// Load CSV file into a workbook with one method call
WorkBook workbook = WorkBook.LoadCSV("sales_data.csv", fileFormat: ExcelFileFormat.XLSX, listDelimiter: ",");
// Access the default worksheet containing CSV data
WorkSheet sheet = workbook.DefaultWorkSheet;
// Display all rows and CSV columns
foreach (var row in sheet.Rows)
{
    foreach (var cell in row)
    {
        Console.Write(cell.Value + "\t");
    }
    Console.WriteLine();
}
Imports IronXL

' Load CSV file into a workbook with one method call
Dim workbook As WorkBook = WorkBook.LoadCSV("sales_data.csv", fileFormat:=ExcelFileFormat.XLSX, listDelimiter:=",")
' Access the default worksheet containing CSV data
Dim sheet As WorkSheet = workbook.DefaultWorkSheet
' Display all rows and CSV columns
For Each row In sheet.Rows
    For Each cell In row
        Console.Write(cell.Value & vbTab)
    Next
    Console.WriteLine()
Next
$vbLabelText   $csharpLabel

入力

. .NETで CSV を読み込む: IronXLを使用した最もシンプルな C# アプローチ: 画像 2 - サンプル CSV 入力

出力

. .NETで CSV を読み込む: IronXLを使用した最もシンプルな C# アプローチ: 画像 3 - コンソール出力

LoadCSV メソッドは、ファイル パス、内部表現の対象となる Excel 形式、および値を区切る区切り文字の 3 つのパラメータを受け取ります。 一度読み込まれると、CSVコンテンツはDefaultWorkSheetプロパティを通じてアクセス可能になり、インポートされたすべてのレコードを含むプライマリワークシートが提供されます。

ネストされたループ構造は、ワークシート内の各 Row を反復処理し、次にその行内の各 Cell を反復処理します。 Value プロパティはセルの内容をオブジェクトとして返し、タブ文字はコンソール出力で読みやすい列区切りを作成します。 このパターンは、ソースファイルに10行しか含まれていない場合でも、数千件のレコードを含む大規模なCSVファイルの場合でも、全く同じように機能します。

IronXLは、.NET Framework、 .NET Core、および.NET 5以降に対応しており、Microsoft Officeのインストールを必要としないため、 ASP.NET Coreおよび.NET Core Web APIプロジェクトに最適です。 このライブラリはNuGetで入手可能で、あらゆる種類のプロジェクトにスムーズに統合できます。 ライブラリがどのような処理を自動で行ってくれるのかを理解したい場合は、次のセクションで手動解析の内容について説明します。

手動 CSV 構文解析とライブラリの使用はどのように比較されますか?

IronXLが解消する複雑さを理解することで、その価値がより明確になる。 手作業によるCSVの解析では、単純に見えてすぐに問題となる複数のエッジケースを、どのようなプロジェクトでも処理する必要があります。

using System.IO;

// Manual approach -- requires extensive code for basic functionality
string path = "data.csv";
string[] lines = File.ReadAllLines(path);
foreach (string line in lines)
{
    // This breaks when CSV fields contain commas inside quotes
    string[] fields = line.Split(',');
    foreach (string field in fields)
    {
        Console.Write(field.Trim() + "\t");
    }
    Console.WriteLine();
}
using System.IO;

// Manual approach -- requires extensive code for basic functionality
string path = "data.csv";
string[] lines = File.ReadAllLines(path);
foreach (string line in lines)
{
    // This breaks when CSV fields contain commas inside quotes
    string[] fields = line.Split(',');
    foreach (string field in fields)
    {
        Console.Write(field.Trim() + "\t");
    }
    Console.WriteLine();
}
Imports System.IO

' Manual approach -- requires extensive code for basic functionality
Dim path As String = "data.csv"
Dim lines As String() = File.ReadAllLines(path)
For Each line As String In lines
    ' This breaks when CSV fields contain commas inside quotes
    Dim fields As String() = line.Split(","c)
    For Each field As String In fields
        Console.Write(field.Trim() & vbTab)
    Next
    Console.WriteLine()
Next
$vbLabelText   $csharpLabel

入力

. .NETで CSV を読み込む: IronXLを使用した最もシンプルな C# アプローチ: 画像 4 - CSV 入力

出力

. .NETで CSV を読み込む: IronXLを使用した最もシンプルな C# アプローチ: 画像 5 - 手動 CSV 解析出力

CSVフィールドに引用符で囲まれた文字列の中にカンマが埋め込まれている場合、手動によるアプローチは失敗します。これは、住所フィールドや説明文でよく見られる状況です。 ファイルを正しく読み込むには、引用符で囲まれたフィールド、エスケープされた引用符、複数行の値、およびさまざまなエンコーディングを適切に処理する必要があります。 独自のパーサーを作成するということは、StreamReader を作成し、ステートマシンのロジックを実装し、読み取りプロセス全体を自分で管理することを意味します。 本来なら一行で済むはずの内容なのに、ずいぶん長々と定型文を使っている。

IronXLの代替ソリューションは、あらゆる特殊なケースを自動的に処理します。

using IronXL;

// IronXL approach -- handles all edge cases automatically
WorkBook workbook = WorkBook.LoadCSV("data.csv", fileFormat: ExcelFileFormat.XLSX, listDelimiter: ",");
var records = workbook.DefaultWorkSheet.Rows;
foreach (var row in records)
{
    foreach (var cell in row)
    {
        Console.Write(cell.Value + "\t");
    }
    Console.WriteLine();
}
using IronXL;

// IronXL approach -- handles all edge cases automatically
WorkBook workbook = WorkBook.LoadCSV("data.csv", fileFormat: ExcelFileFormat.XLSX, listDelimiter: ",");
var records = workbook.DefaultWorkSheet.Rows;
foreach (var row in records)
{
    foreach (var cell in row)
    {
        Console.Write(cell.Value + "\t");
    }
    Console.WriteLine();
}
Imports IronXL

' IronXL approach -- handles all edge cases automatically
Dim workbook As WorkBook = WorkBook.LoadCSV("data.csv", fileFormat:=ExcelFileFormat.XLSX, listDelimiter:=",")
Dim records = workbook.DefaultWorkSheet.Rows
For Each row In records
    For Each cell In row
        Console.Write(cell.Value & vbTab)
    Next
    Console.WriteLine()
Next
$vbLabelText   $csharpLabel

WorkBook クラスは解析の複雑さを内部的に管理するため、データの抽出ではなく、データの操作に集中できます。 IronXLの全機能については、 IronXLの機能概要をご覧ください。

CSVファイルの様々な区切り文字はどのように処理しますか?

CSVファイルでは、必ずしもカンマが区切り文字として使用されるとは限りません。 欧州のシステムでは、小数点にコンマが含まれるため、セミコロンがよく使用されます。 タブ区切り値(TSV)ファイルやパイプ区切りファイルは、さまざまなアプリケーションやレガシーシステムからのデータエクスポートで頻繁に見られます。

using IronXL;

// Reading a semicolon-delimited file (common in European exports)
WorkBook euroData = WorkBook.LoadCSV("german_report.csv", fileFormat: ExcelFileFormat.XLSX, listDelimiter: ";");
// Reading a tab-separated file
WorkBook tsvData = WorkBook.LoadCSV("exported_data.tsv", fileFormat: ExcelFileFormat.XLSX, listDelimiter: "\t");
// Reading a pipe-delimited file
WorkBook pipeData = WorkBook.LoadCSV("legacy_system.csv", fileFormat: ExcelFileFormat.XLSX, listDelimiter: "|");
// Access data identically regardless of original delimiter
WorkSheet sheet = euroData.DefaultWorkSheet;
int rowsCount = sheet.RowCount;
Console.WriteLine($"Loaded {rowsCount} rows with {sheet.ColumnCount} CSV columns");
using IronXL;

// Reading a semicolon-delimited file (common in European exports)
WorkBook euroData = WorkBook.LoadCSV("german_report.csv", fileFormat: ExcelFileFormat.XLSX, listDelimiter: ";");
// Reading a tab-separated file
WorkBook tsvData = WorkBook.LoadCSV("exported_data.tsv", fileFormat: ExcelFileFormat.XLSX, listDelimiter: "\t");
// Reading a pipe-delimited file
WorkBook pipeData = WorkBook.LoadCSV("legacy_system.csv", fileFormat: ExcelFileFormat.XLSX, listDelimiter: "|");
// Access data identically regardless of original delimiter
WorkSheet sheet = euroData.DefaultWorkSheet;
int rowsCount = sheet.RowCount;
Console.WriteLine($"Loaded {rowsCount} rows with {sheet.ColumnCount} CSV columns");
Imports IronXL

' Reading a semicolon-delimited file (common in European exports)
Dim euroData As WorkBook = WorkBook.LoadCSV("german_report.csv", fileFormat:=ExcelFileFormat.XLSX, listDelimiter:=";")
' Reading a tab-separated file
Dim tsvData As WorkBook = WorkBook.LoadCSV("exported_data.tsv", fileFormat:=ExcelFileFormat.XLSX, listDelimiter:=vbTab)
' Reading a pipe-delimited file
Dim pipeData As WorkBook = WorkBook.LoadCSV("legacy_system.csv", fileFormat:=ExcelFileFormat.XLSX, listDelimiter:="|")
' Access data identically regardless of original delimiter
Dim sheet As WorkSheet = euroData.DefaultWorkSheet
Dim rowsCount As Integer = sheet.RowCount
Console.WriteLine($"Loaded {rowsCount} rows with {sheet.ColumnCount} CSV columns")
$vbLabelText   $csharpLabel

LoadCSV 内の listDelimiter パラメータは、フィールド区切り文字として任意の1文字またはエスケープシーケンスを受け入れます。 タブ文字は、\t というエスケープシーケンスを使用します。 ロード後、データ構造は元の形式に関係なく一貫性を保つため、区切り文字が異なる複数のソースからのCSVファイルを簡単に処理できます。 ほとんどのCSVファイルのデフォルト値はカンマですが、この柔軟性により、プロジェクトで遭遇するあらゆるバリエーションに対応できます。

入力

. .NETで CSV を読み込む: IronXLを使用した最もシンプルな C# アプローチ: 画像 6 - セミコロン区切りの CSV ファイル入力

出力

. .NETで CSV を読み込む: IronXLを使用した最もシンプルな C# アプローチ: 画像 7 - セミコロン区切りの出力

RowCountおよび ColumnCount プロパティを使用すると、ファイルが正しく読み込まれたことをすばやく確認できます。これは、特に馴染みのないデータ ソースを扱う場合や、 ASP.NET Coreアプリケーションでユーザーのアップロードを検証する場合に役立ちます。

エンコードに関する考慮事項

IronXLは、フランス語やドイツ語のデータに含まれるアクセント付き文字など、非ASCII文字を含むファイルを読み込む際、ファイルのバイトオーダーマーク(BOM)からエンコーディングを自動的に読み取ります。 BOM(バイトオーダーマーク)のないファイルの場合は、ソース側でエンコーディングを確認する必要があるかもしれません。 Microsoft のファイル エンコーディングに関するドキュメントには、 .NETのエンコーディングの種類に関する詳細なリファレンスが記載されています。

CSVをDataTableに変換する最良の方法は何ですか?

CSV データを DataTable に変換すると、データベース操作、UI アプリケーションでのデータバインディング、および LINQ クエリとの統合が可能になります。 ToDataTableメソッドは、この変換を 1 回の呼び出しで実行します。

using IronXL;
using System.Data;

// Load CSV and convert to DataTable
WorkBook workbook = WorkBook.LoadCSV("customers.csv", ExcelFileFormat.XLSX, ",");
WorkSheet sheet = workbook.DefaultWorkSheet;
// Convert worksheet to DataTable -- true parameter uses CSV header as column names
DataTable dataTable = sheet.ToDataTable(true);
// DataTable is now ready for database operations, binding, or LINQ queries
Console.WriteLine($"DataTable created with {dataTable.Columns.Count} columns:");
foreach (DataColumn column in dataTable.Columns)
{
    // Property names from CSV header become column names
    Console.WriteLine($"  - {column.ColumnName}");
}
Console.WriteLine($"\nTotal records: {dataTable.Rows.Count}");
// Access data using standard DataTable syntax
foreach (DataRow row in dataTable.Rows)
{
    // Access by column index or name attribute
    string name = row["Name"].ToString();
    string email = row["Email"].ToString();
    Console.WriteLine($"Customer: {name}, Email: {email}");
}
using IronXL;
using System.Data;

// Load CSV and convert to DataTable
WorkBook workbook = WorkBook.LoadCSV("customers.csv", ExcelFileFormat.XLSX, ",");
WorkSheet sheet = workbook.DefaultWorkSheet;
// Convert worksheet to DataTable -- true parameter uses CSV header as column names
DataTable dataTable = sheet.ToDataTable(true);
// DataTable is now ready for database operations, binding, or LINQ queries
Console.WriteLine($"DataTable created with {dataTable.Columns.Count} columns:");
foreach (DataColumn column in dataTable.Columns)
{
    // Property names from CSV header become column names
    Console.WriteLine($"  - {column.ColumnName}");
}
Console.WriteLine($"\nTotal records: {dataTable.Rows.Count}");
// Access data using standard DataTable syntax
foreach (DataRow row in dataTable.Rows)
{
    // Access by column index or name attribute
    string name = row["Name"].ToString();
    string email = row["Email"].ToString();
    Console.WriteLine($"Customer: {name}, Email: {email}");
}
Imports IronXL
Imports System.Data

' Load CSV and convert to DataTable
Dim workbook As WorkBook = WorkBook.LoadCSV("customers.csv", ExcelFileFormat.XLSX, ",")
Dim sheet As WorkSheet = workbook.DefaultWorkSheet
' Convert worksheet to DataTable -- true parameter uses CSV header as column names
Dim dataTable As DataTable = sheet.ToDataTable(True)
' DataTable is now ready for database operations, binding, or LINQ queries
Console.WriteLine($"DataTable created with {dataTable.Columns.Count} columns:")
For Each column As DataColumn In dataTable.Columns
    ' Property names from CSV header become column names
    Console.WriteLine($"  - {column.ColumnName}")
Next
Console.WriteLine(vbCrLf & $"Total records: {dataTable.Rows.Count}")
' Access data using standard DataTable syntax
For Each row As DataRow In dataTable.Rows
    ' Access by column index or name attribute
    Dim name As String = row("Name").ToString()
    Dim email As String = row("Email").ToString()
    Console.WriteLine($"Customer: {name}, Email: {email}")
Next
$vbLabelText   $csharpLabel

ToDataTable のブール型パラメータは、最初の行を列ヘッダー (true) にするか、データ (false) にするかを決定します。 true に設定すると、結果として得られる DataTable の列には CSV ファイルのヘッダー名が引き継がれ、row["Name"] のような列名を使用して直感的にデータにアクセスできるようになります。

データベースとUIの統合にDataTableを使用する

この変換は、SqlBulkCopy を使用したデータベースの一括挿入、Windows Forms アプリケーションでの DataGridView コントロールへのデータ入力、または LINQ 式を使用した複雑なデータ変換の実行が必要なシナリオで役立ちます。 DataTable 形式は、 .NET Core Web API プロジェクト内の Entity Framework やその他の ORM ツールとも自然に統合されます。 DataTableのエクスポートパターンに関する詳細は、 IronXL DataTableガイドをご覧ください。

.NETで表形式データを扱う際のその他のパタ​​ーンについては、 Microsoft の ADO .NET の概要が信頼できる参考資料となります。

CSVファイルをExcel形式に変換するにはどうすればよいですか?

IronXLの特筆すべき機能の一つは、CSVデータを適切なExcel形式に変換することです。 これにより、元々はフラットなCSVデータに、数式、書式設定、グラフ、複数のワークシートを追加することが可能になります。これは、CSV出力だけでは実現できないことです。

using IronXL;

// Load CSV data from file path
string path = "quarterly_sales.csv";
WorkBook workbook = WorkBook.LoadCSV(path, ExcelFileFormat.XLSX, ",");
// Save as Excel XLSX format -- creates a new Excel file
workbook.SaveAs("quarterly_sales.xlsx");
// Alternative: Save as legacy XLS format for older Excel versions
workbook.SaveAs("quarterly_sales.xls");
Console.WriteLine("CSV successfully converted to Excel format");
using IronXL;

// Load CSV data from file path
string path = "quarterly_sales.csv";
WorkBook workbook = WorkBook.LoadCSV(path, ExcelFileFormat.XLSX, ",");
// Save as Excel XLSX format -- creates a new Excel file
workbook.SaveAs("quarterly_sales.xlsx");
// Alternative: Save as legacy XLS format for older Excel versions
workbook.SaveAs("quarterly_sales.xls");
Console.WriteLine("CSV successfully converted to Excel format");
Imports IronXL

' Load CSV data from file path
Dim path As String = "quarterly_sales.csv"
Dim workbook As WorkBook = WorkBook.LoadCSV(path, ExcelFileFormat.XLSX, ","c)
' Save as Excel XLSX format -- creates a new Excel file
workbook.SaveAs("quarterly_sales.xlsx")
' Alternative: Save as legacy XLS format for older Excel versions
workbook.SaveAs("quarterly_sales.xls")
Console.WriteLine("CSV successfully converted to Excel format")
$vbLabelText   $csharpLabel

SaveAs メソッドは、ファイル拡張子に基づいて出力形式を自動的に決定します。 XLSX は Excel 2007 以降と互換性のある最新の Office Open XML ファイルを作成しますが、XLS は古いアプリケーション用の従来のバイナリ交換ファイル形式ドキュメントを生成します。

入力

. .NETで CSV を読み込む: IronXLを使用した最もシンプルな C# アプローチ: 画像 8 - CSV データ

出力

. .NETで CSV を読み込む: IronXLを使用した最もシンプルな C# アプローチ: 画像 9 - Excel 出力

. .NETで CSV を読み込む: IronXLを使用した最もシンプルな C# アプローチ: 画像 10 - CSV から Excel への出力

このワークフローは、データベースやAPIからエクスポートしたCSVデータを、ユーザーに配布する前に何らかの形で改善する必要がある場合に特に役立ちます。 変換後、Excelファイルには追加の書式設定、数式の追加、または他のワークシートとの結合を行うことができます。これらはすべて、IronXLの編集機能を通じてプログラム的に実行可能です。 このプロセスは完全にスクリプト化可能であるため、自動レポート作成パイプラインやスケジュールされたタスクに適しています。

CSVデータ内の特定のセル値にアクセスするにはどうすればよいですか?

IronXLはすべてのレコードを反復処理するだけでなく、使い慣れたExcelスタイルのアドレス指定を使って直接セルにアクセスすることもできます。 これにより、さまざまなデータ型にわたって、的を絞ったデータ抽出と型安全な値の取得が可能になります。

using IronXL;

WorkBook workbook = WorkBook.LoadCSV("inventory.csv", ExcelFileFormat.XLSX, ",");
WorkSheet sheet = workbook.DefaultWorkSheet;
// Access specific cells using Excel-style addresses by index
string productName = sheet["A2"].StringValue;
int quantity = sheet["B2"].IntValue;
decimal price = sheet["C2"].DecimalValue;
Console.WriteLine($"Product: {productName}");
Console.WriteLine($"Quantity: {quantity}");
Console.WriteLine($"Price: ${price:F2}");
// Access a range of cells -- return records from column A
var productRange = sheet["A2:A10"];
Console.WriteLine("\nAll products:");
foreach (var cell in productRange)
{
    Console.WriteLine($"  - {cell.StringValue}");
}
using IronXL;

WorkBook workbook = WorkBook.LoadCSV("inventory.csv", ExcelFileFormat.XLSX, ",");
WorkSheet sheet = workbook.DefaultWorkSheet;
// Access specific cells using Excel-style addresses by index
string productName = sheet["A2"].StringValue;
int quantity = sheet["B2"].IntValue;
decimal price = sheet["C2"].DecimalValue;
Console.WriteLine($"Product: {productName}");
Console.WriteLine($"Quantity: {quantity}");
Console.WriteLine($"Price: ${price:F2}");
// Access a range of cells -- return records from column A
var productRange = sheet["A2:A10"];
Console.WriteLine("\nAll products:");
foreach (var cell in productRange)
{
    Console.WriteLine($"  - {cell.StringValue}");
}
Imports IronXL

Dim workbook As WorkBook = WorkBook.LoadCSV("inventory.csv", ExcelFileFormat.XLSX, ",")
Dim sheet As WorkSheet = workbook.DefaultWorkSheet
' Access specific cells using Excel-style addresses by index
Dim productName As String = sheet("A2").StringValue
Dim quantity As Integer = sheet("B2").IntValue
Dim price As Decimal = sheet("C2").DecimalValue
Console.WriteLine($"Product: {productName}")
Console.WriteLine($"Quantity: {quantity}")
Console.WriteLine($"Price: ${price:F2}")
' Access a range of cells -- return records from column A
Dim productRange = sheet("A2:A10")
Console.WriteLine(vbCrLf & "All products:")
For Each cell In productRange
    Console.WriteLine($"  - {cell.StringValue}")
Next
$vbLabelText   $csharpLabel

セルのアドレス指定はExcelの慣例に従い、アルファベットはCSVの列(A、B、C)を表し、数字は行のインデックス位置(1、2、3)を表します。 Cellクラスは、BoolValue、および DateTimeValue などの型固有のアクセサーを提供します。 これらのアクセサーは解析と変換を自動的に処理するため、すべてを文字列値として保存する場合と比べて、手動での型変換が不要になります。

A2:A10 のような表記を使用した範囲選択は、反復、集計関数、および一括操作をサポートするRangeオブジェクトを返します。 これは、大きなCSVファイルから特定の列や長方形のデータ領域を抽出する際に役立ちます。 例えば、特定の列から値のリストを作成したり、フィルタリングされたデータを別のファイルに書き込んだりすることができます。その他のパタ​​ーンについては、 IronXL の範囲ガイドを参照してください。

CSVファイルを読み込む際に発生するエラーはどのように処理しますか?

本番環境のアプリケーションでは、ファイル操作に関する防御的なコードが必要となる。 CSVファイルの読み込みが失敗する理由はいくつか考えられます。ファイルが存在しない、アクセスが拒否された、データが不正な形式である、または非常に大きなファイルに対してメモリが不足している、などが挙げられます。 IronXL の呼び出しを try/catch ブロックで囲み、ロード前にパスを検証することで、環境を問わず信頼性の高い動作が得られます。

using IronXL;
using System.IO;

string filePath = "customers.csv";
if (!File.Exists(filePath))
{
    Console.WriteLine($"File not found: {filePath}");
    return;
}
try
{
    WorkBook workbook = WorkBook.LoadCSV(filePath, ExcelFileFormat.XLSX, ",");
    WorkSheet sheet = workbook.DefaultWorkSheet;
    DataTable dataTable = sheet.ToDataTable(true);
    Console.WriteLine($"Loaded {dataTable.Rows.Count} records successfully.");
}
catch (IronXl.Exceptions.IronXLException ex)
{
    Console.WriteLine($"IronXL parsing error: {ex.Message}");
}
catch (IOException ex)
{
    Console.WriteLine($"File access error: {ex.Message}");
}
catch (Exception ex)
{
    Console.WriteLine($"Unexpected error: {ex.Message}");
}
using IronXL;
using System.IO;

string filePath = "customers.csv";
if (!File.Exists(filePath))
{
    Console.WriteLine($"File not found: {filePath}");
    return;
}
try
{
    WorkBook workbook = WorkBook.LoadCSV(filePath, ExcelFileFormat.XLSX, ",");
    WorkSheet sheet = workbook.DefaultWorkSheet;
    DataTable dataTable = sheet.ToDataTable(true);
    Console.WriteLine($"Loaded {dataTable.Rows.Count} records successfully.");
}
catch (IronXl.Exceptions.IronXLException ex)
{
    Console.WriteLine($"IronXL parsing error: {ex.Message}");
}
catch (IOException ex)
{
    Console.WriteLine($"File access error: {ex.Message}");
}
catch (Exception ex)
{
    Console.WriteLine($"Unexpected error: {ex.Message}");
}
Imports IronXL
Imports System.IO

Dim filePath As String = "customers.csv"
If Not File.Exists(filePath) Then
    Console.WriteLine($"File not found: {filePath}")
    Return
End If

Try
    Dim workbook As WorkBook = WorkBook.LoadCSV(filePath, ExcelFileFormat.XLSX, ",")
    Dim sheet As WorkSheet = workbook.DefaultWorkSheet
    Dim dataTable As DataTable = sheet.ToDataTable(True)
    Console.WriteLine($"Loaded {dataTable.Rows.Count} records successfully.")
Catch ex As IronXl.Exceptions.IronXLException
    Console.WriteLine($"IronXL parsing error: {ex.Message}")
Catch ex As IOException
    Console.WriteLine($"File access error: {ex.Message}")
Catch ex As Exception
    Console.WriteLine($"Unexpected error: {ex.Message}")
End Try
$vbLabelText   $csharpLabel

CSVデータの検証パターン

例外を捕捉するだけでなく、読み込み後に行数と列数を検証することで、切り詰められたファイルや予期しないスキーマ変更を検出するのに役立ちます。 sheet.RowCount を期待される最小値と比較したり、特定の列ヘッダーが最初の行に存在することを確認したりすることで、データの問題が下流に伝播する前に、パイプラインの早い段階で検出できます。 Microsoft の例外処理に関するガイダンスでは、 .NETにおける構造化エラー処理のベストプラクティスについて説明しています。

ユーザーがアップロードしたCSVファイルを処理するアプリケーションでは、読み込み前に必ずファイルサイズを検証し、ファイル名をサニタイズし、アップロードエンドポイントで許可されるコンテンツタイプを制限してください。 これらの対策により、ファイルサイズが大きすぎることによるリソース枯渇を防ぎ、パス・トラバーサル攻撃から保護されます。

IronXLには、ライブラリ固有のエラー用の独自の例外タイプIronXl.Exceptions.IronXLExceptionが含まれており、解析エラーと一般的な入出力の問題を簡単に区別できます。 詳細については、 IronXL APIリファレンスを参照してください。

メモリ不足の問題なく大容量のCSVファイルを読み込むにはどうすればよいですか?

数十万行ものデータを含むファイルの場合、データセット全体を一度にメモリに読み込むのは現実的ではないかもしれません。 IronXL はファイル全体を WorkBook オブジェクトに読み込み、すべてのデータをメモリに保持します。 大規模な ETL (抽出、変換、ロード) シナリオでは、ロード前にソース ファイルを分割するか、StreamReader から行をストリーミングしてチャンクを個別のワークブックに書き込むことにより、CSV をバッチで処理するのが実用的な戦略です。

IronXLのExcelファイル読み込みに関するドキュメントには、大規模なワークロードにおけるパフォーマンス上の考慮事項が記載されています。 特にCSVの場合、CSVフォーマットの行単位の構造により、データセットが単一のメモリ内ロードには大きすぎる場合でも、手動バッチ処理によるシンプルなFile.ReadAllLinesで予測可能なメモリ使用量を実現できます。

IronXLと代替CSVライブラリの比較

IronXLは.NET用の唯一のCSVライブラリではありません。 CsvHelperは、ストリーミング、レコードマッピング、属性ベースの設定に特化した、広く利用されているオープンソースの代替ツールです。 主な違いは対象範囲です。CsvHelperはCSVに特化しているのに対し、 IronXLはスプレッドシートのエコシステム全体を扱い、単一の統一されたAPIを通じてXLSX、XLS、CSVなどの形式の読み込み、書き込み、変換を行います。 アプリケーションが既にExcel操作にIronXLを使用している場合、同じライブラリでCSVを処理することで、余分な依存関係を回避できます。 CSV形式しか扱えず、ストリーミング再生のサポートが必要な場合は、ストリーミング対応のCSVライブラリの方が適しているかもしれません。

IronXLとCsvHelper: .NETにおけるCSV読み込みの主な違い
特徴 IronXL CsvHelper
CSV読み込み はい はい
Excel (XLSX/XLS) のサポート はい なし
大容量ファイルのストリーミング メモリ内のみ はい(ストリーミング配信)
カスタム区切り文字 はい(リスト区切り文字) はい(設定)
DataTable 変換 組み込み関数 (ToDataTable) 手動マッピング
ライセンス コマーシャル オープンソース(MS-PL)

次のステップは何ですか?

.NETでCSVファイルを読むには、適切なアプローチを使用すれば、最小限の労力で済みます。 IronXL の LoadCSV メソッドは、解析の複雑さを自動的に処理し、さまざまな区切り文字をサポートし、構造化データへの即時アクセスを提供し、単一のメソッド呼び出しで Excel または DataTable に変換します。 ASP.NET Coreアプリケーション、 .NET Core Web API、またはコンソールプロジェクトを構築する場合でも、このライブラリはCSV処理を最初から最後まで簡素化します。

ここで学んだことをさらに発展させるために、 IronXLのその他の機能もぜひご覧ください。

無料トライアルを開始して、 IronXLが.NETプロジェクトでのCSVファイルの読み込みをいかに簡素化するかを体験してください。 本番環境への導入の場合、ライセンスオプションには、永久使用権と1年間のサポートが含まれます。

よくある質問

C#でCSVファイルを読む最も簡単な方法は何ですか?

C#でCSVファイルを読む最も簡単な方法は、CSVデータを扱うための簡単で効率的な方法を提供するXLを使用することです。

IronXLは大きなCSVファイルを効率的に処理できますか?

はい、 IronXLは大きな CSV ファイルを処理するように設計されているため、パフォーマンスの問題なしに大規模なデータセットを処理するのに適しています。

IronXLは.NETアプリケーションと互換性がありますか?

IronXLは.NETアプリケーションと完全に互換性があり、開発者はCSV読み取り機能をC#プロジェクトに簡単に統合することができます。

IronXLは異なる区切り文字のCSVファイルの読み込みをサポートしていますか?

IronXLは様々なデリミター付きのCSVファイルの読み込みをサポートしており、異なるフォーマットのファイルにも柔軟に対応できます。

IronXLはヘッダー付きのCSVファイルを解析できますか?

はい、IronXLはヘッダー付きのCSVファイルを解析することができます。

IronXLはどのようにCSVデータ操作を簡素化するのですか?

IronXLはC#で直接CSVデータを読み、編集し、書き込む直感的な方法を提供することで、CSVデータ操作を簡素化します。

IronXLでCSVファイルを非同期で読み込むことはできますか?

IronXLは非同期処理をサポートしており、メインアプリケーションのスレッドをブロックすることなくCSVファイルを読み込むことができます。

IronXLはCSVデータをExcel形式に変換できますか?

IronXL はCSV データを Excel 形式に変換できるため、データ分析やプレゼンテーションに Excel の機能を活用できます。

IronXLはCSVファイルを読み込むための依存関係がありますか?

IronXLはCSVファイルを読み込むために外部依存を必要としないスタンドアローン・ライブラリであり、プロジェクトでのセットアップ・プロセスを簡素化します。

IronXLを使ってCSVから他の形式にデータをエクスポートできますか?

IronXLはCSVからExcelを含む様々なフォーマットにデータをエクスポートすることができます。

カーティス・チャウ
テクニカルライター

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

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

アイアンサポートチーム

私たちは週5日、24時間オンラインで対応しています。
チャット
メール
電話してね