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

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

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

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

最も簡単な方法は、 WorkBook.LoadCSVを使用して CSV データをワークブック構造に直接インポートすることです。 この1つのメソッドで、構文解析、区切り文字の検出、データの整理が自動的に行われます。

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

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

Read CSV .NET: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

入力

Read CSV .NET:IronXLを使用した最も簡単なC#のアプローチ:画像2 - CSV入力のサンプル

出力

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

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

ネストされたループ構造は、ワークシート内の各@--CODE-43195--@@を繰り返し、次にその行内の各@--CODE-43196--@@を繰り返します。 CODE-43197--@@@プロパティはセルの内容をオブジェクトとして返し、タブ文字はコンソール出力で読みやすい列の区切りを作成します。 このパターンは、ソースファイルに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

入力

Read CSV .NET:IronXLを使用した最も簡単なC#アプローチ:画像4 - CSV入力

出力

Read CSV .NET: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

CODE-43199--@@クラスは、内部的に解析の複雑さを管理し、データを抽出することよりも、データを扱うことに集中できるようにします。 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

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

入力

Read CSV .NET:IronXLを使用した最も簡単なC#のアプローチ: イメージ6 - セミコロン区切りのCSVファイル入力

出力

Read CSV .NET:IronXLを使用した最も簡単なC#のアプローチ: イメージ7 - セミコロン区切り出力<a href="/staticassets/excel-blog/read-csv-net/read-csv-net-7 "webp.jp

RowCount および ColumnCount プロパティは、ファイルが正しく読み込まれたことをすばやく確認することができます。これは、見慣れないデータソースを扱う場合や、.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

CODE-43206--@@のbooleanパラメータは、最初の行が列ヘッダ(@--CODE-43207--@)になるか、データ(@--CODE-43208--@)になるかを決定します。 CODE-43209--@@に設定すると、結果の@@--CODE-43210--@のカラムはCSVファイルのヘッダー名を引き継ぎ、@@--CODE-43211--@のようなカラム名を使った直感的なデータアクセスが可能になります。

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

この変換は、SqlBulkCopyを使用したデータベースの一括挿入、Windowsフォーム・アプリケーションの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

CODE-43215--@@@ メソッドは、ファイルの拡張子に基づいて出力形式を自動的に決定します。 CODE-43216--@@は、Excel 2007以降と互換性のある最新のOffice Open XMLファイルを作成し、@--CODE-43217--@は、古いアプリケーション用のレガシーBinary Interchange File Formatドキュメントを作成します。

入力

Read CSV .NET:IronXLを使用した最も簡単なC#のアプローチ:イメージ8 - CSVデータ

出力

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

Read CSV .NET: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クラスは、@--CODE-43218--@、@--CODE-43219--@、@--CODE-43220--@、@--CODE-43221--@、@--CODE-43222--@などの型固有のアクセサを提供します。 これらのアクセサーは解析と変換を自動的に処理するため、すべてを文字列値として保存する場合と比べて、手動での型変換が不要になります。

CODE-43223--@@のような記法を使用した範囲選択は、反復、集約関数、一括操作をサポートする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データの検証パターン

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

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

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

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

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

Excel ファイルの読み取りに関する IronXL のドキュメントでは、大規模なワークロードにおけるパフォーマンス上の考慮事項について解説しています。 特にCSVの場合、CSVフォーマットの行ごとの構造は、データセットが大きすぎて1回のインメモリロードが不可能な場合に、手動バッチによる単純な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時間オンラインで対応しています。
チャット
メール
電話してね