How to Read CSV Files with Commas in C#
なぜ.NET開発者にはより良いCSVソリューションが必要なのか?
CSVファイルは無数 for .NETアプリケーション間でデータ交換を可能にします。 財務報告書から在庫システムに至るまで、数行のコードでプログラム的にCSVファイルを作成する自由があります。 CsvHelperのようなライブラリが基本的なCSV操作をカバーしていますが、現代の開発者はより複雑なシナリオに直面しています:Excelワークブックの変換、エクスポート時のデータ型の保持、エンタープライズ規模のスプレッドシートワークフローの処理。 IronXLは堅牢なCSV書き込みと包括的なExcel機能を単一の依存関係フリーのライブラリで組み合わせ、RFC 4180基準に従い、複数列を簡単に処理します。
これは、複数の列をサポートするカスタム.NET CSVライターや.NET CSVパーサを構築する開発者に理想的です。行固有の機能が処理中の行のみに影響し、自動的に推論されたセパレータをサポートします。
IronXLの始め方
IronXLのインストールはNuGet Package Managerを通じて数秒で完了します。
インストールしたら、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", ",");
}
}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 ClassImports 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.' 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", ";")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 UsingImports 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 UsingIronXLの実装:
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", ",")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ワークフローを合理化する準備はできましたか? 無料トライアルを開始し、$999から始めましょう。
Curtis Chauは、カールトン大学でコンピュータサイエンスの学士号を取得し、Node.js、TypeScript、JavaScript、およびReactに精通したフロントエンド開発を専門としています。直感的で美しいユーザーインターフェースを作成することに情熱を持ち、Curtisは現代のフレームワークを用いた開発や、構造の良い視覚的に魅力的なマニュアルの作成を楽しんでいます。
