C#でカンマを含むCSVファイルを読み取る方法
なぜ.NET開発者にはより良いCSVソリューションが必要なのか?
CSVファイルは無数 for .NETアプリケーション間でデータ交換を可能にします。 財務報告書から在庫システムに至るまで、数行のコードでプログラム的にCSVファイルを作成する自由があります。 CsvHelperのようなライブラリが基本的なCSV操作をカバーしていますが、現代の開発者はより複雑なシナリオに直面しています:Excelワークブックの変換、エクスポート時のデータ型の保持、エンタープライズ規模のスプレッドシートワークフローの処理。 IronXLは、堅牢なCSVライティングと包括的なExcel機能を組み合わせたこれらの課題に対応し、複数の列を簡単に扱える単独の、依存関係のないライブラリであり、RFC 4180標準に従っています。
これは、複数の列をサポートするカスタム.NET CSVライターや.NET CSVパーサを構築する開発者に理想的です。行固有の機能が処理中の行のみに影響し、自動的に推論されたセパレータをサポートします。
IronXLの始め方
IronXLのインストールはNuGet Package Managerを通じて数秒で完了します。
Install-Package IronXL.Excel
インストールしたら、IronXLネームスペースを追加し、効率的にCSVファイルを作成し、区切られた値を操作し始めることができます。
using IronXL;
class Program
{
static void Main(string[] args)
{
// Create a new workbook and worksheet
WorkBook workBook = WorkBook.Create();
WorkSheet workSheet = workBook.CreateWorkSheet("data");
// Add headers
workSheet["A1"].Value = "Product";
workSheet["B1"].Value = "Quantity";
workSheet["C1"].Value = "Price";
// Add data
workSheet["A2"].Value = "Widget";
workSheet["B2"].Value = 100;
workSheet["C2"].Value = 19.99;
// Save as CSV with comma delimiter
workBook.SaveAsCsv("inventory.csv", ",");
}
}
using IronXL;
class Program
{
static void Main(string[] args)
{
// Create a new workbook and worksheet
WorkBook workBook = WorkBook.Create();
WorkSheet workSheet = workBook.CreateWorkSheet("data");
// Add headers
workSheet["A1"].Value = "Product";
workSheet["B1"].Value = "Quantity";
workSheet["C1"].Value = "Price";
// Add data
workSheet["A2"].Value = "Widget";
workSheet["B2"].Value = 100;
workSheet["C2"].Value = 19.99;
// Save as CSV with comma delimiter
workBook.SaveAsCsv("inventory.csv", ",");
}
}
Imports IronXL
Class Program
Shared Sub Main(args As String())
' Create a new workbook and worksheet
Dim workBook As WorkBook = WorkBook.Create()
Dim workSheet As WorkSheet = workBook.CreateWorkSheet("data")
' Add headers
workSheet("A1").Value = "Product"
workSheet("B1").Value = "Quantity"
workSheet("C1").Value = "Price"
' Add data
workSheet("A2").Value = "Widget"
workSheet("B2").Value = 100
workSheet("C2").Value = 19.99
' Save as CSV with comma delimiter
workBook.SaveAsCsv("inventory.csv", ",")
End Sub
End Class
このシンプルなコンソールテスタープログラムは、C#コードから直接CSVコンテンツを作成し、データを含むWorkbookオブジェクトを作成する方法を示しています。 SaveAsCsvメソッドはデフォルトのセパレータ(カンマ)を使用しますが、異なるロケールに対してsepを定義することも可能です; これは特に小数点セパレータや代替列セパレータ文字を扱う際に非常に便利です。 内部的には、sepは出力バッファの配列割り当てを処理します。 前述のsepパラメータを使用することで、この文字を定義できます。
また、静的エントリポイントを提供する方法や、複数の行にわたって高性能を実現するための静的に定義されたリソースプールを使用して効率的にメモリ管理を行う方法も示しました。
高度なCSVファイル作成技術

高度なCSVファイル作成技術
ExcelワークブックをCSVに変換する
IronXLは既存のExcelファイルをCSVに変換し、式を評価し、データの整合性を保持するのに優れています。 これはヘッダ行と動的に生成されたデータを含むCSVファイルを作成する際に不可欠です。
// Load an Excel file with formulas and formatting
WorkBook workBook = WorkBook.Load("financial_report.xlsx");
// IronXL evaluates formulas before export
workBook.EvaluateAll();
// Export to CSV - each worksheet creates a separate CSV file
workBook.SaveAsCsv("report.csv", ",");
// Creates: report.Sheet1.csv, report.Sheet2.csv, etc.
// Load an Excel file with formulas and formatting
WorkBook workBook = WorkBook.Load("financial_report.xlsx");
// IronXL evaluates formulas before export
workBook.EvaluateAll();
// Export to CSV - each worksheet creates a separate CSV file
workBook.SaveAsCsv("report.csv", ",");
// Creates: report.Sheet1.csv, report.Sheet2.csv, etc.
' Load an Excel file with formulas and formatting
Dim workBook As WorkBook = WorkBook.Load("financial_report.xlsx")
' IronXL evaluates formulas before export
workBook.EvaluateAll()
' Export to CSV - each worksheet creates a separate CSV file
workBook.SaveAsCsv("report.csv", ",")
' Creates: report.Sheet1.csv, report.Sheet2.csv, etc.
複数のシートのワークブックを変換する際、IronXLは各ワークシートごとに個別のCSVファイルを自動的に生成します。 式の計算はエクスポート前に実行され、最終CSV出力に正確なデータを保証します。 しかし、これは唯一の機能ではありません。 デフォルトの自動推論されたセパレータは地域間での互換性を保証し、複数の行や複数の列がシームレスに処理されます。
デフォルトのサポートされている区切りが異なる動的環境では、nullable sepを使用することもできます。
出力
まず、こちらで、我々のマルチシートExcelファイルから生成されたCSVファイルを見ることができます:

そして、これはExcelシートの1つと対応するCSVファイルの例の比較です:

DataTableをCSVにエクスポートする
データベース駆動のアプリケーションのために、IronXLはDataTableエクスポートを簡素化します。 より明確にするために、通常のref var vの代わりにDatarowにvarを設定しています。
// Assume dataTable contains query results
DataTable dataTable = GetSalesData();
WorkBook workBook = WorkBook.Create();
WorkSheet workSheet = workBook.CreateWorkSheet("sales");
// Import DataTable directly
var row = 1;
foreach (var dataRow in dataTable.Rows)
{
for (var col = 0; col < dataTable.Columns.Count; col++)
{
workSheet.SetCellValue(row, col, dataRow[col].ToString());
}
row++;
}
// Export with custom delimiter if needed
workBook.SaveAsCsv("sales_data.csv", ";");
// Assume dataTable contains query results
DataTable dataTable = GetSalesData();
WorkBook workBook = WorkBook.Create();
WorkSheet workSheet = workBook.CreateWorkSheet("sales");
// Import DataTable directly
var row = 1;
foreach (var dataRow in dataTable.Rows)
{
for (var col = 0; col < dataTable.Columns.Count; col++)
{
workSheet.SetCellValue(row, col, dataRow[col].ToString());
}
row++;
}
// Export with custom delimiter if needed
workBook.SaveAsCsv("sales_data.csv", ";");
Imports System.Data
' Assume dataTable contains query results
Dim dataTable As DataTable = GetSalesData()
Dim workBook As WorkBook = WorkBook.Create()
Dim workSheet As WorkSheet = workBook.CreateWorkSheet("sales")
' Import DataTable directly
Dim row As Integer = 1
For Each dataRow As DataRow In dataTable.Rows
For col As Integer = 0 To dataTable.Columns.Count - 1
workSheet.SetCellValue(row, col, dataRow(col).ToString())
Next
row += 1
Next
' Export with custom delimiter if needed
workBook.SaveAsCsv("sales_data.csv", ";")
インポート時には、dataTable.Rowsコレクションからの各行の水平データセットがワークシートの新しい行になります。 IronXLは変換中にデータ型を保存し、数値は数値のまま、日付は書式を保持し、テキストは特別な文字を追加の構成なしで正しく処理します。
出力
ここでは、モックデータソースの横にある出力されたCSVファイルを見ることができます:

IronXLとCsvHelperの比較:CSVファイル作成の比較
この従業員データエクスポートシナリオを考えてみましょう。CSVの解析と出力ワークフローを示しています。
CsvHelperの実装:
using (var writer = new StreamWriter("employees.csv"))
using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
{
csv.WriteRecords(employees);
}
using (var writer = new StreamWriter("employees.csv"))
using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
{
csv.WriteRecords(employees);
}
Imports System.Globalization
Imports System.IO
Imports CsvHelper
Using writer As New StreamWriter("employees.csv")
Using csv As New CsvWriter(writer, CultureInfo.InvariantCulture)
csv.WriteRecords(employees)
End Using
End Using
IronXLの実装:
WorkBook workBook = WorkBook.Create();
WorkSheet workSheet = workBook.CreateWorkSheet("employees");
// Add data with automatic type handling
int rowIndex = 1;
foreach (var emp in employees)
{
workSheet[$"A{rowIndex}"].Value = emp.Name;
workSheet[$"B{rowIndex}"].Value = emp.Salary;
workSheet[$"C{rowIndex}"].Value = emp.StartDate;
rowIndex++;
}
workBook.SaveAsCsv("employees.csv", ",");
WorkBook workBook = WorkBook.Create();
WorkSheet workSheet = workBook.CreateWorkSheet("employees");
// Add data with automatic type handling
int rowIndex = 1;
foreach (var emp in employees)
{
workSheet[$"A{rowIndex}"].Value = emp.Name;
workSheet[$"B{rowIndex}"].Value = emp.Salary;
workSheet[$"C{rowIndex}"].Value = emp.StartDate;
rowIndex++;
}
workBook.SaveAsCsv("employees.csv", ",");
Dim workBook As WorkBook = WorkBook.Create()
Dim workSheet As WorkSheet = workBook.CreateWorkSheet("employees")
' Add data with automatic type handling
Dim rowIndex As Integer = 1
For Each emp In employees
workSheet($"A{rowIndex}").Value = emp.Name
workSheet($"B{rowIndex}").Value = emp.Salary
workSheet($"C{rowIndex}").Value = emp.StartDate
rowIndex += 1
Next
workBook.SaveAsCsv("employees.csv", ",")
|
特徴 |
CsvHelper |
IronXL |
|---|---|---|
|
基本的なCSVの書き方 |
✓ |
✓ |
|
ExcelからCSVへの変換 |
✗ |
✓ |
|
式の評価 |
✗ |
✓ |
|
複数シートの取り扱い |
✗ |
✓ |
|
データ型の保存 |
マニュアル |
自動翻訳 |
|
Excel形式のサポート |
✗ |
XLSX、XLS、XLSM |
|
MS Officeは不要 |
✓ |
✓ |
CsvHelperは単純な書き込み操作を効率的に処理しますが、IronXLは複数行、補間文字列、動的コード生成シナリオの活用、さらには構造体リンクのような低レベルの最適化を可能にする柔軟性を提供します。
開発者は特定の条件に一致する行を列挙したり、デフォルトの自動推論されたセパレータを管理したり、行固有の機能を汎用のコンソールプログラムでテストし、デバッグのためにエントリのキーだけを公開することもできます。
エンタープライズ機能とベストプラクティス
IronXLのSaveAsCsvメソッドはエンタープライズ規模の機能を含みます:
- カスタムデリミタ: カンマ、セミコロン、タブまたは任意の文字(セパレータsepでデフォルトのセパレータを上書き可能)
- エンコードオプション: UTF-8、UTF-16、およびカスタムエンコード
- 式評価: エクスポート前にExcel式を計算
- クロスプラットフォームサポート: Windows、Linux、およびmacOSで動作
開発者はまた、拡張メソッドを適用して複数の列を効率的に処理したり、テキストラッピングが必要な場合に複数行にわたるCSV行を書いたりすることもできます。
一般的な問題と解決策
CSVエクスポートを扱う際、開発者はよく以下のような課題に直面します:
*データ内の特殊文字:* IronXL は引用符、カンマ、改行を自動的にエスケープします 大容量ファイルの処理:ワークシート範囲を使用してデータをチャンク単位で処理します。 エンコーディングの問題:国際文字にはUTF-8エンコーディングを指定してください 欠落しているデータ型:** IronXL はデフォルトで数値形式と日付形式を保持します
詳細なトラブルシューティングについては、IronXLのCSVドキュメント、APIリファレンス、サポートリソースをご覧ください。
あなたのCSVライターの構築を今日始めよう
IronXLはCSV作成を解析の課題から簡単な操作に変えます。 CSV機能をExcelワークブックサポート、式評価、そして自動型処理と組み合わせることで、複数のライブラリの管理や手動のデータ変換の複雑さを排除します。
あなたのCSVワークフローを合理化する準備はできましたか? 無料トライアルを開始し、$liteLicenseから始めましょう。
よくある質問
なぜ.NET開発者はより良いCSVソリューションを必要とするのですか?
.NET開発者は、埋め込まれたコンマや特殊文字を含むCSVファイルを扱う際にしばしば課題に直面します。IronXLは、これらの複雑さを容易に扱える高度な機能を提供し、データ解析の正確性と効率を向上させます。
IronXLはCSVファイル内の引用符付きフィールドをどのように扱いますか?
IronXLは、コンマやその他の特殊文字を含むデータが正しく解釈され、エラーなく処理されるように、引用符付きフィールドを含むCSVファイルを正確に解析するよう設計されています。
C#でのCSV解析にIronXLを使用する利点は何ですか?
IronXLは特殊文字、引用フィールド、大規模なデータセットのサポートを含む、CSVファイルを解析するための強力な機能を提供します。これにより信頼性が向上し、開発者がCSV関連の問題のデバッグに費やす時間を短縮します。
IronXLは特殊文字を含むCSVファイルを扱えますか?
はい、IronXLはさまざまな特殊文字を含むCSVファイルを処理でき、すべてのデータが正確に読み取られ、解析エラーやデータ損失を引き起こすことなく処理されます。
IronXLが他のCSV解析ライブラリと異なる点は何か?
IronXLは、埋め込まれたコンマや引用フィールドなどの複雑なCSVシナリオを容易に処理できる能力によって区別されています。その使いやすいAPIと包括的な機能により、C#でCSVデータを扱う開発者にとって好まれる選択肢となっています。
IronXLを使用して大規模なCSVファイルを処理することは可能ですか?
IronXLはパフォーマンスのために最適化されており、大規模なCSVファイルを効率的に処理でき、膨大なデータセットを扱うアプリケーションに適しています。
IronXLはどのようにCSVデータ処理の信頼性を向上させますか?
IronXLは、埋め込まれたコンマや特殊文字を正確に処理することで信頼性を高め、データ解析中のエラー発生を減らし、データの整合性を確保します。



