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

IronXL 與 CsvHelper 的比較

處理 CSV 檔案可能是一項具有挑戰性的任務。 如今有許多函式庫可以幫助開發人員完成這項任務,而無需安裝 Microsoft Excel。

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

我們先來看看這兩個圖書館分別提供了哪些功能。

IronXL圖書館

IronXL 是一個 .NET 函式庫,它能夠使用 C# 讀取和編輯 Microsoft Excel 文件。 IronXL.Excel 是一個獨立的 .NET 軟體庫,用於讀取各種電子表格格式。 它無需安裝 Microsoft Excel,也不依賴 Interop。它能非常流暢地處理 CSV 檔案。

IronXL 是一個直覺的 C# API,它允許您在 .NET 中以閃電般的速度讀取、編輯和建立 Excel 電子表格檔案。 IronXL 完全支援 .NET Core、.NET Framework、Xamarin、行動平台、Linux、macOS 和 Azure。

IronXL 是一個領先的 .NET core 和 .NET framework Excel 電子表格庫,適用於 C#。

IronXL 功能集

  • 載入、讀取和編輯資料-來自 XLS/XLSX/CSV/TSV 格式
  • 儲存與匯出 — 格式為 XLS/XLSX/CSV/TSV/JSON
  • 範圍 — 易於使用的WorkSheet["A1:B10"]語法。 直觀地組合和創建範圍。
  • 排序 — 對範圍、列和行進行排序。
  • 樣式 — 儲存格視覺樣式、字體、大小、背景圖案、邊框、對齊方式和數字格式。

CsvHelper

一個用於讀寫 CSV 檔案的 .NET 函式庫。 速度極快、靈活便利、易於使用。 支援對自訂類別物件進行讀寫操作。 所有範例程式碼都可以在 CsvHelper 套件的文檔中找到。

CsvHelper 功能

  • 速度快:即時編譯類,效能極快
  • 靈活:寫作時保守,閱讀時開放
  • 易於使用:讀寫操作與GetRecords<T> ()一樣簡單GetRecords<T> ()WriteRecords(records)
  • 高度可配置
  • Linux 模式
  • 記憶體佔用低

1. 建立控制台應用程式

請依照下列步驟建立控制台應用程式:

  • 啟動 Visual Studio 2022 IDE。
  • 點選"建立新項目"。
  • 在"建立新項目"頁面中,從語言下拉清單中選擇C# ,從平台清單中選擇Windows ,從"項目類型"清單中選擇控制台
  • 從顯示的專案範本中選擇控制台應用程式 (.NET Framework)
Csvhelper Alternatives 1 related to 1. 建立控制台應用程式

建立專案 - 控制台應用程式

點選"下一步"

  • "附加資訊"畫面中,指定您要使用的框架版本。 本範例將使用.NET Framework 4.8
Csvhelper Alternatives 2 related to 1. 建立控制台應用程式

建立專案 - .NET Framework

點擊"創建"完成該過程。

專案已經創建完成,我們幾乎可以開始測試庫了。 但是,我們仍然需要將它們安裝並整合到我們的專案中。 我們先來安裝IronXL。

2. IronXL C# 庫的安裝

您可以使用以下方法下載並安裝 IronXL 庫:

  1. 在 Visual Studio 中使用 NuGet 套件 2.直接下載 NuGet 套件
  2. 使用 DLL 檔案手動安裝

讓我們仔細看看每一個。

2.1. 在 Visual Studio 中使用 NuGet 套件

Visual Studio 提供 NuGet Package Manager,可在專案中安裝 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 網站並下載套件。 步驟如下

2.3. 使用 DLL 手動安裝

下載和安裝 IronXL C# 庫的另一種方法是使用下列步驟透過開發人員命令提示字元安裝IronXL NuGet 套件

  • 開啟開發者命令提示字元-通常位於 Visual Studio 資料夾中。
  • 輸入以下指令: PM&gt; Install-Package IronXL.Excel
  • 按回車鍵 這將下載並安裝該軟體包。
  • 重新載入您的 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&gt; Install-Package CsvHelper -Version 27.2.1
  • 按回車鍵 這將下載並安裝該軟體包。
  • 重新載入您的 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 bool 資料類型,它只能有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 檔案中新增記錄,因為這會直接覆蓋先前的條目。

請注意CsvHelper 是其各自所有者的註冊商標。 本網站與 CsvHelper 無任何關聯,也未獲得 CsvHelper 的認可或贊助。 所有產品名稱、標誌和品牌均為其各自擁有者的財產。 比較資料僅供參考,並反映撰寫時的公開資訊。

常見問題解答

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

使用 IronXL.Excel,您可以將 Excel 檔案轉換為各種格式,例如 XLS、XLSX、CSV 和 TSV。只要將檔案載入 IronXL,並使用其多功能的匯出選項將檔案儲存為所需格式,即可達成此目的。

與 CsvHelper 相比,使用 IronXL 進行 Excel 檔案操作有哪些優點?

IronXL.Excel 提供處理多種 Excel 格式(包括 XLS、XLSX 和 CSV)的全面功能。它支援資料處理、樣式設定和公式應用等功能,非常適合需要大量 Excel 檔案處理的專案。相比之下,CsvHelper 則是專為快速、有效率的 CSV 檔案作業而設計。

如何為 C# 專案安裝 IronXL?

您可以在 Visual Studio 中透過 NuGet Package Manager 搜尋「IronXL」來安裝 IronXL。另外,您也可以直接下載 NuGet 套件,或在專案中參考 DLL 來手動安裝。

IronXL 是否可以在未安裝 Microsoft Excel 的情況下使用?

是的,IronXL 不需要在您的系統上安裝 Microsoft Excel。它可以獨立讀取、編輯和建立各種格式的 Excel 檔案。

如何使用 CsvHelper 讀寫 CSV 檔案?

CsvHelper 可讓您定義類別來映射 CSV 記錄、配置 CsvHelper 設定,以及使用 CsvReaderCsvWriter 來輕鬆處理 CSV 檔案作業。

是什麼讓 CsvHelper 成為處理 CSV 檔案的熱門選擇?

CsvHelper 以其速度、靈活性和易用性而聞名。它支援自訂類別物件和類型轉換,使其成為專注於 CSV 資料處理專案的首選。

使用 IronXL 是否需要授權?

是的,在商業環境中部署 IronXL 需要付費授權。這與 CsvHelper 不同,CsvHelper 可免費用於商業用途。

哪些類型的專案最能從 IronXL 中獲益?

由於 IronXL.Excel 強大的功能集,需要大量操作各種 Excel 檔案格式(包括樣式設計、資料排序和公式計算等功能)的專案將會從使用 IronXL.Excel 中獲益最多。

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