與其他組件比較

IronXL 和 CsvHelper 的比較

發佈 2022年5月9日
分享:

處理 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 C# Excel 試算表庫。

IronXL 功能集

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

CsvHelper

.NET 程式庫,用於讀取和寫入 CSV 文件。 極快、靈活且易於使用。 支持讀取和寫入自定義類別物件。 所有範例代碼均可在 CsvHelper 文檔安裝包中獲得。

CsvHelper 功能

  • 快速:即時編譯類別以實現極快的效能
  • 靈活性:寫作時保守,閱讀時自由
  • 易於使用:讀取和寫入就像使用 GetRecords 一樣簡單。()和 WriteRecords(記錄)
  • 高度可配置
  • Linux 模式
  • 低內存使用

1. 建立主控台應用程式

使用以下步驟來創建一個控制台應用程式:

  • 啟動 Visual Studio 2022 IDE。
  • 點擊“創建新項目”。
  • 在「創建新專案」頁面中,從語言下拉清單中選擇 C#,從平臺清單中選擇 Windows,並從「專案類型」清單中選擇 Console
  • 選擇控制台應用程式(.NET框架)**從顯示的專案範本中選取。
    Csvhelper Alternatives 1 related to 1. 建立主控台應用程式

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

  • 下一步
  • 附加資訊 畫面中,指定您要使用的 Framework 版本。 在此範例中,我們將使用 .NET Framework 4.8

    Csvhelper Alternatives 2 related to 1. 建立主控台應用程式

    創建專案 - .NET Framework

  • 點擊 Create 完成過程。

    項目現已創建,我們幾乎準備好測試這些庫。 但是,我們仍然需要安裝並將它們整合到我們的專案中。 讓我們先安裝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 網站並下載套件來完成。 步驟如下:

2.3. 使用 DLL 手動安裝

另一種下載和安裝 IronXL C# 庫的方法是使用以下步驟通過開發人員命令提示符安裝 IronXL NuGet package

  • 打開開發者命令提示字元——通常位於 Visual Studio 文件夾中。
  • 輸入以下命令:PM > Install-Package IronXL.Excel
  • 按Enter键
  • 這將下載並安裝該套件
  • 重新加載您的 Visual Studio 專案並開始使用它

2.4. 添加必要的 Using 指令

  1. 在解決方案總管中,右鍵單擊 Program.cs 文件,然後點選查看程式碼。

  2. 在程式碼檔案的頂部添加以下 using 指令:
using IronXL;
using IronXL;
Imports IronXL
VB   C#

全部完成! 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 格式:

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")
VB   C#

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")
VB   C#

每個 WorkBook 可以包含多個 WorkSheet 物件。 這些代表 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")
VB   C#

讀取單元格值的代碼:

// 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
VB   C#

載入並讀取工作簿和工作表後,可以使用以下代碼範例來修改公式或應用於特定單元格。 代碼如下:

// 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()
VB   C#

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
VB   C#

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
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
VB   C#

我們將每一行映射成一個類型為 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
VB   C#

下面是讀取我們 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
VB   C#

資料類型是 IEnumerable. CsvHelper會自動映射每個列到具有相同名稱的屬性。 例如,FirstName 欄位中的值將映射到 Person.FirstName。 然後,我們可以遍歷數據並訪問每一行中的值。

5.2. 將 CSV 文件中的數據從一種類型轉換為另一種類型

CSV 檔案大多包含文字資料。 例如,年齡欄位是整數值,而 CSV 檔案僅包含文字。 CsvHelper 可以將數據從字串轉換為標準 .NET 類型。(布林值, 整數32, 整數64, 列舉型別). 在我們的案例中,我們有一個 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
VB   C#

雖然 bool 是標準的 .NET 類型,但預設轉換器只能處理 True/False 值,而我們的 CSV 文件中有 Yes/No。這裡,我們需要繼承 DefaultTypeConverter,然後覆寫 ConvertFromString 方法。

6. 授權

IronXL 是一款公開商業的 C# Excel 庫. 它在開發過程中是免費的,並且始終可以取得商業部署的許可。授權可用適用於單個專案使用、單個開發人員、代理機構和全球企業,以及 SaaS 和 OEM 重新分發。 所有授權均包含30天退款保證、一年的產品支援和更新,有效於開發/測試/生產環境,並且還有永久授權。(一次性購買). Lite 套裝的起價為 $749。

CsvHelper — 讀寫 CSV 檔案,完全免費供商業使用。

7. 總結與結論

摘要

IronXL 是一個完整的庫,提供了操控 Excel 文件所需的一切功能。它使用簡便,並提供將各種格式轉換成 XLSX 以及從 XLSX 轉換為其他格式(例如 CSV)的功能。這種互相轉換提供了用戶靈活性,能夠輕鬆處理各種文件格式。

另一方面,CsvHelper 專門設計用來處理 CSV 文件格式,這意味著它只能處理 CSV 文件。 所有的程式碼範例都可以在 CsvHelper 文件中找到。 該文件為您提供在項目中使用CsvHelper的指導方針。

結論

IronXL 相較於 CsvHelper 具有明顯的優勢,因為它支持用戶處理多種格式。 此外,您可以根據需要應用公式和樣式,而 CsvHelper 僅允許以有限的選項讀取和寫入 CSV 文件。 此外,您無法將新記錄附加到現有的 CSV 檔案,因為這樣會覆蓋先前的條目。

< 上一頁
IronXL與CsvWriter的比較
下一個 >
IronXL 與 NPOI 的比較

準備開始了嗎? 版本: 2024.11 剛剛發布

免費 NuGet 下載 總下載次數: 1,111,773 查看許可證 >