他のコンポーネントと比較

IronXLとCsvHelperの比較

リーガン・パン
リーガン・パン
2022年5月9日
共有:

CSVファイルの取り扱いは困難な作業となることがあります。 Microsoft Excelをインストールする必要がなく、開発者がこのタスクを支援するために使用できるライブラリは今日、多く存在します。

この記事では、C# .NET技術を使用して、CSV形式または標準のXLSX形式のMicrosoft Excelドキュメントをプログラムで操作する方法を、2つの最も人気のあるライブラリ、IronXLとCsvHelperを使用して議論および比較します。

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

IronXLライブラリ

IronXLは、C#を使用してMicrosoft Excelドキュメントの読み取りと編集を可能にする.NETライブラリです。 IronXL.Excelは、幅広いスプレッドシートフォーマットを読み取るためのスタンドアロンの.NETソフトウェアライブラリです。 Microsoft Excelをインストールする必要はなく、Interopにも依存しません。CSVファイルとは非常にスムーズに動作します。

IronXLは、.NETでExcelスプレッドシートファイルを読み取り、編集し、作成することを可能にする直感的なC# APIで、非常に高速なパフォーマンスを提供します。 IronXLは、.NET Core、.NET Framework、Xamarin、モバイル、Linux、macOS、およびAzureを完全にサポートしています。

IronXLは、C#用の.NET Coreおよび.NET Framework向けの主要なExcelスプレッドシートライブラリです。

IronXL フィーチャーセット

  • 読み込み、読み取り、およびデータの編集 — XLS/XLSX/CSV/TSVから
  • 保存およびエクスポート — XLS/XLSX/CSV/TSV/JSON 形式
  • 範囲 — 使いやすい WorkSheet 「A1:B10」構文。 範囲を直感的に結合し、作成します。
  • 並べ替え — 範囲、列、行を並べ替えます。
  • スタイリング — セルの視覚スタイル、フォント、サイズ、背景パターン、境界線、配置および数値形式。

CsvHelper

CSVファイルの読み書きのための.NETライブラリ。 非常に高速で、柔軟性があり、使いやすい。 カスタムクラスオブジェクトの読み書きをサポートします。 すべてのサンプルコードは、パッケージCsvHelperのドキュメントインストールにて利用可能です。

CsvHelperの機能

  • 高速: 非常に高速なパフォーマンスを実現するためにクラスを即時コンパイルします
  • 柔軟性:書くときに保守的、読むときに自由
  • 使いやすいです: 読み込みと書き込みは、GetRecords()およびWriteRecords(records)と同じくらい簡単です
  • 高度に構成可能
  • Linuxモード
  • 低メモリ使用量

コンソールアプリケーションを作成する

次の手順を使用してコンソールアプリケーションを作成します:

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

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

  • 次へをクリックします。
  • 追加情報 画面で使用したいフレームワークバージョンを指定します。 この例では、.NET Framework 4.8を使用します。

    Csvhelper Alternatives 2 related to コンソールアプリケーションを作成する

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

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

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

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

次の方法を使用して、IronXLライブラリをダウンロードおよびインストールできます:

  1. Visual StudioでNuGetパッケージを使用する

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

  3. DLLを使用して手動インストール

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

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

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

Csvhelper Alternatives 3 related to 2.1. Visual StudioでNuGetパッケージを使用する

選択-管理-NuGet-パッケージ

  • ブラウズタブから -> IronXL.Excelを検索 -> インストール

    Csvhelper Alternatives 4 related to 2.1. Visual StudioでNuGetパッケージを使用する

    IronXLを検索

  • 完了しました。

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

これは、NuGetサイトに直接アクセスし、パッケージをダウンロードすることでできます。 以下の手順は:

  • [https://www.nuget.org/packages/IronXL.Excel](https://www.nuget.org/packages/IronXL.Excel" rel="nofollow noopener noreferrer" target="_blank) に移動します
  • 「ダウンロードパッケージ」を選択
  • ダウンロードしたパッケージをダブルクリックしてください。
  • パッケージがインストールされます。
  • Visual Studio プロジェクトを再読み込みして、使用を開始してください。

2.3. DLL を使用して手動でインストール

IronXL C#ライブラリをダウンロードしてインストールするもう一つの方法は、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 をインストールする必要があります。

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/](https://www.nuget.org/packages/CsvHelper/" rel="nofollow noopener noreferrer" target="_blank)

CSVファイルの使用方法 - IronXL

カンマ区切り値(CSV)ファイルは、値を区切るためにカンマを使用する区切りテキストファイルです。 ファイルの各行はデータレコードです。 これらのファイルを計算用に操作することは困難な作業になる場合がありますが、IronXLはMicrosoft Excelを使用せずにそれを行うための非常に良く、簡単なオプションを提供します。 まず、CSVファイルを通常のExcelファイルに変換しましょう。

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

そのプロセスは非常にシンプルで簡単です。 通常は1行のコードで行われます。

CSVをExcel形式に変換:

WorkBook workbook = WorkBook.LoadCSV("test.csv", fileFormat: ExcelFileFormat.XLSX, ListDelimiter: ",");
WorkSheet ws = workbook.DefaultWorkSheet;
 
workbook.SaveAs("CsvToExcelConversion.xlsx");
WorkBook workbook = WorkBook.LoadCSV("test.csv", fileFormat: ExcelFileFormat.XLSX, ListDelimiter: ",");
WorkSheet ws = workbook.DefaultWorkSheet;
 
workbook.SaveAs("CsvToExcelConversion.xlsx");
Dim workbook As WorkBook = WorkBook.LoadCSV("test.csv", fileFormat:= ExcelFileFormat.XLSX, ListDelimiter:= ",")
Dim ws As WorkSheet = workbook.DefaultWorkSheet
'
workbook.SaveAs("CsvToExcelConversion.xlsx")
$vbLabelText   $csharpLabel

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

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

//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

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

//Open Sheet for reading
var worksheet = workbook.GetWorkSheet("sheetnamegoeshere");
//Open Sheet for reading
var worksheet = workbook.GetWorkSheet("sheetnamegoeshere");
'Open 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
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
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
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ファイルに保存する

IronXLを使用すると、CSVファイルの作成は簡単です。 次のコードは、SaveAsCsvメソッドを使用してExcelファイルをCSV形式で単純に保存します。

WorkBook wb = WorkBook.Load("Normal_Excel_File.xlsx");
//Import .xls, .csv, or .tsv file
wb.SaveAsCsv("SaveAsCSV.csv", ",");
//Saved as : SaveAsCSV.Sheet1.csv
WorkBook wb = WorkBook.Load("Normal_Excel_File.xlsx");
//Import .xls, .csv, or .tsv file
wb.SaveAsCsv("SaveAsCSV.csv", ",");
//Saved as : SaveAsCSV.Sheet1.csv
Dim wb As WorkBook = WorkBook.Load("Normal_Excel_File.xlsx")
'Import .xls, .csv, or .tsv file
wb.SaveAsCsv("SaveAsCSV.csv", ",")
'Saved as : SaveAsCSV.Sheet1.csv
$vbLabelText   $csharpLabel

CSVファイルの操作 - CsvHelperを使用する

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
FirstName,LastName,Age,IsActive
Ali,Talal,30,Yes
Affan,Ahmad,31,No
Saad,Bhatti,31,Yes
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'FirstName,LastName,Age,IsActive Ali,Talal,30,Yes Affan,Ahmad,31,No Saad,Bhatti,31,Yes
$vbLabelText   $csharpLabel

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

public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int? Age { get; set; }
    public string IsActive { get; set; }
}
public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int? Age { get; set; }
    public string IsActive { get; set; }
}
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ファイルを読み取るためのコードです。

var fileName = @"<path to our CSV file>";
var configuration = new CsvConfiguration(CultureInfo.InvariantCulture)
{
    Encoding = Encoding.UTF8,
    Delimiter = ","
};

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>();

        foreach (var person in data)
        {
            // Do something with values in each row
        }
    }
}
var fileName = @"<path to our CSV file>";
var configuration = new CsvConfiguration(CultureInfo.InvariantCulture)
{
    Encoding = Encoding.UTF8,
    Delimiter = ","
};

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>();

        foreach (var person in data)
        {
            // Do something with values in each row
        }
    }
}
Dim fileName = "<path to our CSV file>"
Dim configuration = New CsvConfiguration(CultureInfo.InvariantCulture) With {
	.Encoding = Encoding.UTF8,
	.Delimiter = ","
}

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)()

		For Each person In data
			' Do something with values in each row
		Next person
	End Using
	End Using
End Using
$vbLabelText   $csharpLabel

データの型はIEnumerableです。 CsvHelperは各列を同じ名前のプロパティに自動的にマッピングします。 例えば、FirstName 列の値は Person.FirstName にマッピングされます。 次にデータを反復処理し、各行の値にアクセスすることができます。

CSVファイル内のデータを別のタイプに変換する

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

public class CustomBooleanConverter : DefaultTypeConverter
{
    public override object ConvertFromString(string text, IReaderRow row, MemberMapData memberMapData)
    {
        return text.Equals("Yes", StringComparison.OrdinalIgnoreCase);
    }
}
public class CustomBooleanConverter : DefaultTypeConverter
{
    public override object ConvertFromString(string text, IReaderRow row, MemberMapData memberMapData)
    {
        return text.Equals("Yes", StringComparison.OrdinalIgnoreCase);
    }
}
Public Class CustomBooleanConverter
	Inherits DefaultTypeConverter

	Public Overrides Function ConvertFromString(ByVal text As String, ByVal row As IReaderRow, ByVal memberMapData As MemberMapData) As Object
		Return text.Equals("Yes", StringComparison.OrdinalIgnoreCase)
	End Function
End Class
$vbLabelText   $csharpLabel

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

6. ライセンス

IronXLは、オープンに商用利用が可能なC# Excelライブラリです。 開発は無料で行え、商用配布用にいつでもライセンスを取得できます。[ライセンスはこちら](/csharp/excel/licensing/" target="_blank)より、単一プロジェクト、単一開発者、代理店、グローバル企業、またはSaaSおよびOEM再配布向けに利用可能です。 すべてのライセンスには、30日間の返金保証、1年間の製品サポートと更新、開発/ステージング/本番環境での有効性、そして永続ライセンス(1回限りの購入)が含まれています。 Liteパッケージは$749から始まります。

CsvHelper—CSVファイルの読み書き用であり、商業利用に完全に無料です。

要約と結論

サマリー

IronXLは、Excelファイルを操作するために必要なすべてを提供する完全なライブラリです。使いやすく、様々な形式をXLSXに変換する機能を提供し、またXLSXから他の形式、例えばCSVに変換する機能も備えています。これらの相互変換により、ユーザーは様々なファイル形式を簡単に扱う柔軟性を得ることができます。

一方、CsvHelperはCSVファイルフォーマットで動作するように特化して設計されているため、CSVファイルのみを扱うことができます。 すべてのコードサンプルは、CsvHelperのドキュメントファイルにあります。 ドキュメントには、プロジェクトでCsvHelperを使用するためのガイドラインが記載されています。

結論

IronXLは複数のフォーマットを扱うユーザーをサポートしているため、CsvHelperに対して明確な優位性があります。 さらに、お好みに合わせて数式やスタイルを適用することができますが、CsvHelperはCSVファイルの読み書きのみを許可し、オプションは限られています。 また、新しいレコードを既存のCSVファイルに追加することはできません。既存のエントリが上書きされてしまいます。

リーガン・パン
ソフトウェアエンジニア
レーガンはリーディング大学で電子工学の学士号を取得しました。Iron Softwareに入社する前の仕事では、一つのタスクに集中して取り組んでいました。Iron Softwareでは、営業、技術サポート、製品開発、マーケティングのいずれにおいても広範な業務に携わることが最も楽しいと感じています。彼は、Iron Softwareライブラリを開発者がどのように使用しているかを理解し、その知識を使ってドキュメントを継続的に改善し、製品を開発することを楽しんでいます。
< 以前
IronXLとCsvWriterの比較
次へ >
IronXLとNPOIの比較 IronXLとNPOIは、開発者がExcelファイルを操作するために使用する2つの人気のあるライブラリです。それぞれのライブラリには、異なる機能と利点があります。 IronXLは、.NETフレームワークに対応する強力なExcelライブラリであり、開発者がExcelファイルを簡単に読み込み、操作し、保存できるようにします。IronXLは、高度なフォーマット機能、強力なデータ操作、そして高パフォーマンスなエンジンを提供します。このライブラリは商用ライセンスされており、企業向けに最適です。 一方、NPOIはオープンソースのExcelライブラリであり、無料で使用できます。NPOIは、基本的な読み込みと書き込み機能を提供し、広くコミュニティでサポートされています。しかし、高度な機能や商用サポートを必要とする企業には、IronXLの方が適している場合があります。 総じて、IronXLはその高機能と商用サポートによって、企業向けのプロフェッショナルな解決策として優れています。一方で、NPOIはコスト意識の高いプロジェクトや基本的なExcel操作を必要とする開発者にとって十分な選択肢です。