跳過到頁腳內容
與其他組件的比較

IronXL 與 CsvHelper 的比較

使用 CSV 檔案可能是一項具有挑戰性的任務。 目前有許多庫可以幫助開發人員完成此任務而無需安裝 Microsoft Excel。

本文中,我們將討論和比較如何在 C# .NET 技術中以程式化的方式處理 Microsoft Excel 文件,無論是 CSV 格式還是標準 XLSX 格式,使用兩個最受歡迎的庫:IronXL 和 CsvHelper。

我們先看看這兩個庫能夠提供什麼。

IronXL 函式庫

IronXL 是一個 .NET 庫,可用 C# 輕鬆讀取和編輯 Microsoft Excel 文件。 IronXL.Excel 是一個獨立的 .NET 軟體函式庫,用於讀取一系列電子表格格式。 它不需要安裝 Microsoft Excel,也不依賴於 Interop,並且能夠順利處理 CSV 文件。

IronXL 是一個直觀的 C# API,允許您在 .NET 中以極快的性能讀取、編輯和創建 Excel 試算表文件。 IronXL 完全支持 .NET Core、.NET 框架、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. 安裝 CsvHelper C# 庫以讀取 CSV 文件
  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,並在“專案類型”列表中選擇控制台
  • 從顯示的專案範本中選擇控制台應用程式(.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 框架

  • 點擊 創建 完成過程。

現在專案已創建,我們幾乎準備好測試這些庫了。 然而,我們仍然需要在專案中安裝並集成它們。 讓我們先安裝 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-package

  • 現在,從瀏覽選項卡 -> 搜索 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 網站下載套件。 步驟如下:

2.3. 使用 DLL 手動安裝

下載並安裝 IronXL C# 函式庫的另一種方法,是使用開發命令提示裡的以下步驟通過開發命令提示符來安裝IronXL NuGet 套件

  • 開啟 開發人員命令提示符 — 通常位於 Visual Studio 文件夾中。
  • 輸入以下命令:PM> Install-Package IronXL.Excel
  • 按 Enter
  • 這將下載並安裝包
  • 重新載入您的 Visual Studio 專案並開始使用它

2.4. 添加必要的命名空間指令

  1. 在 Solution Explorer 中,右鍵點擊 Program.cs 文件,然後點擊查看代碼。
  2. 在代碼文件的頂部添加以下命名空間指令:
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 格式

這個過程相當簡單且容易。 通常一行代碼即可完成。

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) 的路徑。 以下一行代碼用於打開文件以供閱讀:

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

用 IronXL 寫入 CSV 文件是一個簡單有趣的過程。 下面的代碼簡單地使用 SaveAsCsv 方法將 Excel 文件儲存在 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
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 文件,它有三個文本列和一個數字列。

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 天退款保證,一年的產品支持和更新,適用於開發/測試/生產的有效性,並且也是永久性許可證(一次性購買)。 Lite 套餐從$799開始。

CsvHelper — 讀取和寫入 CSV 文件完全免費用於商業用途。

7. 摘要与結論

總結

IronXL 是一個完整的庫,提供您操作 Excel 文件所需的一切。它易於使用,并提供将各种格式转换为 XLSX 的功能,以及从 XLSX 转换为其他格式,如 CSV。这种相互转换为用户提供了轻松处理各种文件格式的灵活性。

另一方面,CsvHelper 专门设计用于处理 CSV 文件格式,这意味着它只能处理 CSV 文件。 所有代碼示例都可以在 CsvHelper 文檔文件中找到。 文檔為您提供有关如何在您的项目中使用 CsvHelper 的指南。

結論

IronXL 由于支持用户使用多种格式,在 CsvHelper 面前具有明显的优势。 此外,您可以根据需要应用公式和样式,而 CsvHelper 仅允许有限选项的 CSV 文件读取和写入。 此外,您不能向现有的 CSV 文件添加新记录,因为它只会覆盖以前的条目。

[{i:(CsvHelper 是其相应所有者的注册商标。 本网站并未与 CsvHelper 相关联,也未获得其背书或赞助。 所有產品名稱、徽標和品牌均為其各自所有者的財產。 比較僅供參考,反映撰寫時公開可用的信息。

常見問題解答

如何使用 C# 將 Excel 文件轉換為不同格式?

使用 IronXL,您可以將 Excel 文件轉換為多種格式,例如 XLS、XLSX、CSV 和 TSV。這可以通過使用 IronXL 加載文件並通過其多功能的導出選項將其保存為所需格式來完成。

使用 IronXL 進行 Excel 文件操作有什麼好處?

IronXL 提供了全面的功能,可以處理包括 XLS、XLSX 和 CSV 在內的多種 Excel 格式。它支持數據操作、樣式設置和公式應用等功能,非常適合需要大量處理 Excel 文件的項目。而 CsvHelper 專門為快速高效的 CSV 文件操作而設計。

如何安裝 IronXL 用於 C# 項目?

您可以通過在 Visual Studio 中使用 NuGet 包管理器搜索 'IronXL' 來安裝 IronXL。或者,您可以直接下載 NuGet 包或通過在項目中引用 DLL 手動安裝它。

可以在沒有安裝 Microsoft Excel 的情況下使用 IronXL 嗎?

可以,IronXL 不要求您的系統安裝 Microsoft Excel。它可以獨立運行,讀取、編輯和創建各種格式的 Excel 文件。

如何使用 CsvHelper 讀寫 CSV 文件?

CsvHelper 允許您定義一個類來映射 CSV 記錄,配置 CsvHelper 設置,並使用 CsvReaderCsvWriter 輕鬆處理 CSV 文件操作。

CsvHelper 在處理 CSV 文件方面受歡迎的原因是什麼?

CsvHelper 以其速度、靈活性和易用性而聞名。它支持自定義類對象和類型轉換,使其成為專注於 CSV 數據處理的項目的首選。

使用 IronXL 有許可證需求嗎?

是的,在商業環境中部署 IronXL 需要付費許可證。這與 CsvHelper 的免費商業使用形成對比。

哪些類型的項目將最能受益於 IronXL?

需要廣泛操作各種 Excel 文件格式的項目,包括樣式設置、數據排序和公式計算等功能,由於 IronXL 的強大功能集,將最能從中受益。

Jordi Bardia
軟體工程師
Jordi 在 Python、C# 和 C++ 上最得心應手,當他不在 Iron Software 展現技術時,便在做遊戲編程。在分担产品测测试,产品开发和研究的责任时,Jordi 为持续的产品改进增值。他说这种多样化的经验使他受到挑战并保持参与, 而这也是他与 Iron Software 中工作一大乐趣。Jordi 在佛罗里达州迈阿密长大,曾在佛罗里达大学学习计算机科学和统计学。