フッターコンテンツにスキップ
他のコンポーネントと比較する

IronXLとCsvHelperの比較

CSVファイルの操作は、挑戦的な作業になることがあります。 今日では、多くのライブラリが開発者をこのタスクからMicrosoft Excelをインストールする必要なしに支援するために利用可能です。

この記事では、C# .NET技術を使用して、CSV形式または標準のXLSX形式のMicrosoft Excel文書をプログラム的に操作する方法を、IronXLとCsvHelperという2 つの最も人気のあるライブラリを使用して比較しながら説明します。

まずは両方のライブラリが提供するものを見てみましょう。

IronXLライブラリ

IronXLは、C#でMicrosoft Excel文書の読み取りと編集を容易にする.NETのライブラリです。 IronXL.Excelは、さまざまなスプレッドシート形式を読み取るためのスタンドアローンの.NETソフトウェアライブラリです。 Microsoft Excelのインストールは不要であり、Interopにも依存しません。CSVファイルととてもスムーズに動作します。

IronXLは直感的なC# APIであり、Excelスプレッドシートファイルを.NETで超高速で読み取り、編集、作成できます。 IronXLは、.NET Core、.NET Framework、Xamarin、モバイル、Linux、macOS、およびAzureを完全にサポートしています。

IronXLは、C#向けのリーディング.NET Coreおよび.NETフレームワークのExcelスプレッドシートライブラリです。

IronXLの機能セット

  • データをロード、読み取り、編集 — XLS/XLSX/CSV/TSV から
  • 保存とエクスポート — XLS/XLSX/CSV/TSV/JSON へ
  • 範囲 — 使いやすい WorkSheet["A1:B10"] 構文。 直感的に範囲を結合・作成します。
  • ソート — 範囲、列、行のソート。
  • スタイリング — セルの視覚スタイル、フォント、サイズ、背景パターン、境界、配置、番号フォーマット。

CsvHelper

CSVファイルの読み取りと書き込みを行う.NETライブラリ。 非常に高速で柔軟、かつ使いやすい。 カスタムクラスオブジェクトの読み書きをサポート。 すべてのサンプルコードはCsvHelperのドキュメント内にあります。

class="hsg-featured-snippet">

C#でのCsvHelperの使い方

  1. CSVファイルを読み込むためにCsvHelper C#ライブラリをインストール
  2. CsvConfiguration クラスを利用してCSVの設定を行う
  3. C#の組込み StreamReader でファイルを開く
  4. ステップ2 & 3で作成したインスタンスを CsvReader クラスに入力して読み込む
  5. CsvHelper DefaultTypeConverterクラスを継承してCSV内のデータを変換

CsvHelperの特徴

  • 高速: クラスをフライでコンパイルして極めて高速なパフォーマンスを実現
  • 柔軟: 書き込みは保守的、読み込みは自由
  • 簡単: GetRecords<T>()WriteRecords(records) のように簡単
  • 高度に設定可能
  • Linux対応モード
  • メモリ使用量が少ない

1. コンソールアプリケーションを作成

コンソールアプリケーションを作成する手順は以下の通りです:

  • Visual Studio 2022 IDE を開始します。
  • 新しいプロジェクトを作成」をクリックします。
  • 新しいプロジェクトを作成」ページで、言語ドロップダウンリストから C# を選択し、プラットフォーム リストから Windows を、そしてプロジェクトタイプリストから コンソール を選択します。
  • 表示されるプロジェクトテンプレートから Console App (.NET Framework) を選択します。
class="content-img-align-center">
class="center-image-wrapper">Csvhelper Alternatives 1 related to 1. コンソールアプリケーションを作成

プロジェクトを作成 - コンソールアプリケーション

  • 次へをクリックします。
  • 追加情報画面で使用したいフレームワークバージョンを指定します。 この例では.NET Framework 4.8を使用します。
class="content-img-align-center">
class="center-image-wrapper">Csvhelper Alternatives 2 related to 1. コンソールアプリケーションを作成

プロジェクトを作成 - .NET Framework

  • 作成をクリックしてプロセスを完了します。

プロジェクトが作成され、ライブラリのテストの準備がほぼ整いました。 ただし、ライブラリをプロジェクトにインストールして統合する必要があります。 まずIronXLをインストールしましょう。

2. IronXL C#ライブラリのインストール

IronXLライブラリをダウンロードしてインストールする方法としては以下のものがあります:

  1. Visual StudioでNuGetパッケージを使用します
  2. NuGet パッケージを直接ダウンロードします
  3. DLLで手動インストールします

それぞれを詳しく見ていきましょう。

2.1. Visual StudioでNuGetパッケージを使用します

Visual Studioは、NuGetパッケージをプロジェクトにインストールするNuGetパッケージマネージャーを提供しています。 これにアクセスするには、プロジェクトメニューを通じて、またはソリューションエクスプローラでプロジェクトを右クリックして行います。

class="content-img-align-center">
class="center-image-wrapper">Csvhelper Alternatives 3 related to 2.1. Visual StudioでNuGetパッケージを使用します

NuGet パッケージの管理を選択

  • 今度は、ブラウズ タブから、IronXL.Excel を検索 -> インストールします
class="content-img-align-center">
class="center-image-wrapper">Csvhelper Alternatives 4 related to 2.1. Visual StudioでNuGetパッケージを使用します

IronXLを検索

  • 完了しました。

2.2. NuGetパッケージを直接ダウンロード

これはNuGetサイトに直接アクセスしてパッケージをダウンロードすることによって行うことが可能です。 手順は次の通りです:

  • https://www.nuget.org/packages/IronXL.Excel に移動します
  • 「パッケージをダウンロード」を選択
  • ダウンロードしたパッケージをダブルクリックします
  • パッケージがインストールされます
  • Visual Studio プロジェクトをリロードして、使用を開始します

2.3. DLLで手動インストールします

もう一つのIronXL C#ライブラリをダウンロードしてインストールする方法は、Developer Command Promptを使用してIronXL NuGetパッケージをインストールする以下の手順を実行することです。

  • 開発者コマンドプロンプト を開く — 通常は Visual Studio フォルダ内にあります。
  • 次のコマンドを入力します: PM> Install-Package IronXL.Excel
  • Enterキーを押します
  • これにより、パッケージのダウンロードとインストールが行われます
  • Visual Studio プロジェクトをリロードして、使用を開始します

2.4. 必要なusingディレクティブを追加

  1. ソリューションエクスプローラーで Program.cs ファイルを右クリックして、[コードの表示] をクリックします。
  2. コードファイルの冒頭に以下のusingディレクティブを追加します。
using IronXL;
using IronXL;
Imports IronXL
$vbLabelText   $csharpLabel

これで完了です! IronXLはダウンロードされ、インストールされ、使用準備が整いました。 ただし、その前に CsvHelper をインストールするべきです。

3. CsvHelper のインストール

3.1. NuGet パッケージ マネージャー コンソールを使う場合

CsvHelper C# ライブラリをダウンロードしてインストールするには、開発者コマンドプロンプトを介して NuGet パッケージ をインストールするための次の手順を使用します。

  • 開発者コマンドプロンプト を開く — 通常は Visual Studio フォルダ内にあります。
  • 次のコマンドを入力します: PM> Install-Package CsvHelper -Version 27.2.1
  • Enterキーを押します
  • これにより、パッケージのダウンロードとインストールが行われます
  • Visual Studio プロジェクトをリロードして、使用を開始します

3.2. 直接ダウンロード

NuGetウェブサイトからダウンロードしてください: https://www.nuget.org/packages/CsvHelper

4. IronXL を使用した CSV ファイルの操作

カンマ区切り値 (CSV)ファイルは、カンマを使って値を分ける区切りテキストファイルです。 ファイルの各行はデータレコードです。 これらのファイルを計算のために操作することは挑戦的な作業になる可能性があり、IronXLはMicrosoft Excelなしでそれを行うための非常に良い簡単なオプションを提供しています。 まず最初に、CSVファイルを通常のExcelファイルに変換しましょう。

4.1. CSVファイルをExcel形式に変換

このプロセスは非常に簡単で簡潔です。 通常、1行のコードで完了します。

CSVからExcel形式へ:

// Load the CSV file and convert it to an Excel format
WorkBook workbook = WorkBook.LoadCSV("test.csv", fileFormat: ExcelFileFormat.XLSX, ListDelimiter: ",");
// Access the default worksheet
WorkSheet ws = workbook.DefaultWorkSheet;

// Save the workbook as an Excel file
workbook.SaveAs("CsvToExcelConversion.xlsx");
// Load the CSV file and convert it to an Excel format
WorkBook workbook = WorkBook.LoadCSV("test.csv", fileFormat: ExcelFileFormat.XLSX, ListDelimiter: ",");
// Access the default worksheet
WorkSheet ws = workbook.DefaultWorkSheet;

// Save the workbook as an Excel file
workbook.SaveAs("CsvToExcelConversion.xlsx");
' Load the CSV file and convert it to an Excel format
Dim workbook As WorkBook = WorkBook.LoadCSV("test.csv", fileFormat:= ExcelFileFormat.XLSX, ListDelimiter:= ",")
' Access the default worksheet
Dim ws As WorkSheet = workbook.DefaultWorkSheet

' Save the workbook as an Excel file
workbook.SaveAs("CsvToExcelConversion.xlsx")
$vbLabelText   $csharpLabel

4.2. IronXL を使用して変換された CSV ファイルを読み取りおよび操作

IronXLのWorkBookクラスはExcelシートを表します。 C#を使用してExcelファイルを開くためには、WorkBook.Loadを使用し、Excelファイル(.xlsx)のパスを指定します。 以下の1行コードは、読み取りのためにファイルを開くために使用されます:

// Load WorkBook
var workbook = WorkBook.Load(@"Spreadsheets/sample.xlsx");
// Load WorkBook
var workbook = WorkBook.Load(@"Spreadsheets/sample.xlsx");
' Load WorkBook
Dim workbook = WorkBook.Load("Spreadsheets/sample.xlsx")
$vbLabelText   $csharpLabel

WorkBook は複数の WorkSheet オブジェクトを含むことができます。 これらはExcelドキュメントのワークシートを表しています。 ワークブックにワークシートがある場合、次のようにして名前で取得します:

// Open the sheet for reading
var worksheet = workbook.GetWorkSheet("sheetnamegoeshere");
// Open the sheet for reading
var worksheet = workbook.GetWorkSheet("sheetnamegoeshere");
' Open the sheet for reading
Dim worksheet = workbook.GetWorkSheet("sheetnamegoeshere")
$vbLabelText   $csharpLabel

セル値を読み取るためのコード:

// Read from ranges of cells elegantly
foreach (var cell in worksheet["A2:A10"])
{
    Console.WriteLine("Cell {0} has value '{1}'", cell.AddressString, cell.Text);
}
// Read from ranges of cells elegantly
foreach (var cell in worksheet["A2:A10"])
{
    Console.WriteLine("Cell {0} has value '{1}'", cell.AddressString, cell.Text);
}
' Read from ranges of cells elegantly
For Each cell In worksheet("A2:A10")
	Console.WriteLine("Cell {0} has value '{1}'", cell.AddressString, cell.Text)
Next cell
$vbLabelText   $csharpLabel

ワークブックとワークシートを読み込んだ後、次のコード例を使用して、数式の変更を行ったり、特定のセルに適用することができます。 コードは次の通りです:

// Set formulas in specific cells
worksheet["A1"].Formula = "SUM(B8:C12)";
worksheet["B8"].Formula = "=C9/C11";
worksheet["G30"].Formula = "MAX(C3:C7)";

// Force recalculate all formula values in all sheets
workbook.EvaluateAll();
// Set formulas in specific cells
worksheet["A1"].Formula = "SUM(B8:C12)";
worksheet["B8"].Formula = "=C9/C11";
worksheet["G30"].Formula = "MAX(C3:C7)";

// Force recalculate all formula values in all sheets
workbook.EvaluateAll();
' Set formulas in specific cells
worksheet("A1").Formula = "SUM(B8:C12)"
worksheet("B8").Formula = "=C9/C11"
worksheet("G30").Formula = "MAX(C3:C7)"

' Force recalculate all formula values in all sheets
workbook.EvaluateAll()
$vbLabelText   $csharpLabel

4.3. Excel文書を再びCSVファイルに保存する

CSVファイルの書き込みは、IronXLを使用することで簡単なプロセスです。 次のコードは、単にExcelファイルをCSV形式で SaveAsCsv メソッドを利用して保存します。

// Load the Excel Workbook
WorkBook wb = WorkBook.Load("Normal_Excel_File.xlsx");

// Save the workbook as a CSV file
wb.SaveAsCsv("SaveAsCSV.csv", ",");
// This will save as "SaveAsCSV.Sheet1.csv"
// Load the Excel Workbook
WorkBook wb = WorkBook.Load("Normal_Excel_File.xlsx");

// Save the workbook as a CSV file
wb.SaveAsCsv("SaveAsCSV.csv", ",");
// This will save as "SaveAsCSV.Sheet1.csv"
' Load the Excel Workbook
Dim wb As WorkBook = WorkBook.Load("Normal_Excel_File.xlsx")

' Save the workbook as a CSV file
wb.SaveAsCsv("SaveAsCSV.csv", ",")
' This will save as "SaveAsCSV.Sheet1.csv"
$vbLabelText   $csharpLabel

5. CsvHelper を使用した CSV ファイルの操作

CSVファイルの読み取りは、想像よりも難しいことがあるタスクのひとつです。 CsvHelperライブラリは、型安全で高速かつ柔軟なコードを書きやすくしてくれます。

5.1. CsvHelperでCSVファイルを読み込む

こちらがサンプルのCSVファイルです。それには3つのテキストカラムと1つのナンバーカラムがあります。

FirstName,LastName,Age,IsActive
Ali,Talal,30,Yes
Affan,Ahmad,31,No
Saad,Bhatti,31,Yes

各行を Person タイプのオブジェクトにマッピングします。

// Define the Person class to map CSV records
public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int? Age { get; set; }
    public string IsActive { get; set; }
}
// Define the Person class to map CSV records
public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int? Age { get; set; }
    public string IsActive { get; set; }
}
' Define the Person class to map CSV records
Public Class Person
	Public Property FirstName() As String
	Public Property LastName() As String
	Public Property Age() As Integer?
	Public Property IsActive() As String
End Class
$vbLabelText   $csharpLabel

私たちのCSVファイルを読むためのコードは以下です。

// Define the path to the CSV file
var fileName = @"<path to our CSV file>";

// Configure CsvHelper
var configuration = new CsvConfiguration(CultureInfo.InvariantCulture)
{
    Encoding = Encoding.UTF8,
    Delimiter = ","
};

// Read CSV file
using (var fs = File.Open(fileName, FileMode.Open, FileAccess.Read, FileShare.Read))
{
    using (var textReader = new StreamReader(fs, Encoding.UTF8))
    using (var csv = new CsvReader(textReader, configuration))
    {
        var data = csv.GetRecords<Person>();

        // Iterate over each person record
        foreach (var person in data)
        {
            // Process each Person object
        }
    }
}
// Define the path to the CSV file
var fileName = @"<path to our CSV file>";

// Configure CsvHelper
var configuration = new CsvConfiguration(CultureInfo.InvariantCulture)
{
    Encoding = Encoding.UTF8,
    Delimiter = ","
};

// Read CSV file
using (var fs = File.Open(fileName, FileMode.Open, FileAccess.Read, FileShare.Read))
{
    using (var textReader = new StreamReader(fs, Encoding.UTF8))
    using (var csv = new CsvReader(textReader, configuration))
    {
        var data = csv.GetRecords<Person>();

        // Iterate over each person record
        foreach (var person in data)
        {
            // Process each Person object
        }
    }
}
' Define the path to the CSV file
Dim fileName = "<path to our CSV file>"

' Configure CsvHelper
Dim configuration = New CsvConfiguration(CultureInfo.InvariantCulture) With {
	.Encoding = Encoding.UTF8,
	.Delimiter = ","
}

' Read CSV file
Using fs = File.Open(fileName, FileMode.Open, FileAccess.Read, FileShare.Read)
	Using textReader = New StreamReader(fs, Encoding.UTF8)
	Using csv = New CsvReader(textReader, configuration)
		Dim data = csv.GetRecords(Of Person)()

		' Iterate over each person record
		For Each person In data
			' Process each Person object
		Next person
	End Using
	End Using
End Using
$vbLabelText   $csharpLabel

data のタイプは IEnumerable<Person> です。 CsvHelperは、それぞれのカラムを同じ名前のプロパティに自動的にマッピングします。 例えば、FirstName カラムの値は Person.FirstName にマッピングされます。 その後、dataをイテレートして、各行の値にアクセスすることができます。

5.2. CSVファイル内のデータをある型から別の型へ変換する

CSVファイルは主にテキストデータを含んでいます。 例えば、年齢カラムは整数値であり、CSVファイルはテキストのみを含んでいます。 CsvHelperは、文字列から標準の.NET型(Boolean, Int32, Int64, Enum)にデータを変換することができます。 私たちの場合、IsActiveというブールデータ型があり、True/False のみを持つことができ、標準ではない値を含んでいます。 カスタムコンバーターを作成することで、これを変換することができます。 コードのスタイリングは次の通りです。

// Custom Boolean Converter for CsvHelper
public class CustomBooleanConverter : DefaultTypeConverter
{
    public override object ConvertFromString(string text, IReaderRow row, MemberMapData memberMapData)
    {
        // Convert "Yes" to true and anything else to false
        return text.Equals("Yes", StringComparison.OrdinalIgnoreCase);
    }
}
// Custom Boolean Converter for CsvHelper
public class CustomBooleanConverter : DefaultTypeConverter
{
    public override object ConvertFromString(string text, IReaderRow row, MemberMapData memberMapData)
    {
        // Convert "Yes" to true and anything else to false
        return text.Equals("Yes", StringComparison.OrdinalIgnoreCase);
    }
}
' Custom Boolean Converter for CsvHelper
Public Class CustomBooleanConverter
	Inherits DefaultTypeConverter

	Public Overrides Function ConvertFromString(ByVal text As String, ByVal row As IReaderRow, ByVal memberMapData As MemberMapData) As Object
		' Convert "Yes" to true and anything else to false
		Return text.Equals("Yes", StringComparison.OrdinalIgnoreCase)
	End Function
End Class
$vbLabelText   $csharpLabel

たとえboolが標準の.NET型であっても、デフォルトのコンバーターはTrue/Falseしか処理できませんが、私たちのCSVファイルにはYes/Noがあります。 ここでは、DefaultTypeConverterをサブクラス化し、ConvertFromStringメソッドをオーバーライドする必要があります。

6. ライセンス

IronXL is an openly commercial C# Excel library. 開発には無料で使用でき、商用デプロイメントのためにいつでもライセンスを取得できます。 Licenses are available for single-project use, single developers, agencies, and global corporations, as well as SaaS and OEM redistribution. すべてのライセンスには30日間の返金保証、1年間の製品サポートとアップデート、デブ/スタージング/プロダクションのための有効性、および永久ライセンス(1回の購入)が含まれています。 Liteパッケージは$799から始まります。

CsvHelper — CSVファイルの読み書きは商業利用において完全に無料です。

7. まとめと結論

概要

IronXLはExcelファイルを操作するために必要なすべてを提供する完全なライブラリです。使用が簡単で、さまざまな形式をXLSXに、またXLSXをCSVなどの他の形式に変換する機能を提供します。この相互変換は、さまざまなファイル形式を簡単に操作する柔軟性をユーザーに提供します。

一方、CsvHelperは、CSVファイル形式と特に連携するために設計されており、CSVファイルのみを処理できます。 すべてのサンプルコードはCsvHelperのドキュメントファイルにあります。 ドキュメントでは、プロジェクトでCsvHelperを使用する方法についてのガイドラインが示されています。

結論

IronXLは複数の形式で作業するユーザーをサポートしているため、CsvHelperに対して明らかな利点があります。 さらに、選択に応じて数式やスタイルを適用することができますが、CsvHelperは限られたオプションでCSVファイルの読み書きしかできません。 また、新しいレコードを既存のCSVファイルに追加することはできず、以前のエントリを上書きしてしまいます。

ご注意CsvHelperの登録商標はその所有者に帰属します。 このサイトはCsvHelperと提携しておらず、承認またはスポンサーされていません。 すべての製品名、ロゴ、およびブランドは各所有者の所有物です。 比較は情報提供のみを目的としており、執筆時点で公開されている情報を反映しています。

よくある質問

C#を使用してExcelファイルを異なる形式に変換するにはどうすればよいですか?

IronXLを使用すると、ExcelファイルをXLS、XLSX、CSV、TSVなどさまざまな形式に変換できます。IronXLでファイルを読み込んで、柔軟なエクスポートオプションを使用して希望の形式で保存することで実行できます。

Excelファイル操作においてCsvHelperに対するIronXLの利点は何ですか?

IronXLは、XLS、XLSX、CSVを含む複数のExcel形式での作業に対する包括的な機能を提供します。データ操作、スタイリング、数式の適用などの機能をサポートしており、大規模なExcelファイル処理を必要とするプロジェクトに理想的です。対照的に、CsvHelperは高速で効率的なCSVファイル操作に特化しています。

C#プロジェクトのためにIronXLをインストールするにはどうすればよいですか?

Visual StudioのNuGetパッケージマネージャーで「IronXL」を検索してインストールできます。あるいは、NuGetパッケージを直接ダウンロードするか、プロジェクトでDLLを参照して手動でインストールすることもできます。

Microsoft ExcelをインストールしなくてもIronXLを使用できますか?

はい、IronXLはシステムにMicrosoft Excelをインストールする必要がありません。独立して動作し、さまざまな形式でExcelファイルを読み取り、編集、作成することができます。

CsvHelperを使ってCSVファイルを読み書きするにはどうすればよいですか?

CsvHelperを使用すると、CSVレコードをマップするクラスを定義し、CsvHelperの設定を構成し、CsvReaderCsvWriterを使用してCSVファイル操作を簡単に行うことができます。

CSVファイル処理のためにCsvHelperが人気の理由は何ですか?

CsvHelperは、速度、柔軟性、使いやすさで知られています。カスタムクラスオブジェクトとタイプ変換をサポートしており、CSVデータ処理に特化したプロジェクトで好まれる選択肢となっています。

IronXLの使用にライセンス要件はありますか?

はい、商用環境でIronXLを展開するには有料ライセンスが必要です。CsvHelperは商業利用が無料であるのに対し、この点が異なります。

どのようなプロジェクトがIronXLの恩恵を受けるでしょうか?

スタイリング、データの並べ替え、数式計算など、さまざまなExcelファイル形式の広範な操作を必要とするプロジェクトは、その堅牢な機能セットのおかげでIronXLから最大の利益を得るでしょう。

Curtis Chau
テクニカルライター

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

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