與其他組件比較

IronXL 和 CsvHelper 的比較

發佈 2022年5月9日
分享:

處理 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 Framework、Xamarin、Mobile、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 文件安裝包中找到。

<div 類別="hsg-featured-snippet">

如何在 C# 中使用 CsvHelper

<ol>  
    <li><a 類別="js-modal-open" data-modal-id="trial-license-after-download" href="https://nuget.org/packages/IronXL.Excel/">安裝 CsvHelper C# 庫以讀取 CSV 文件</a></li>
    <li>利用 <code>CsvConfiguration</code> 用於設置 CSV 配置的類別</li>
    <li>使用 C# 内建功能開啟檔案 <code>串流讀取器</code></li>
    <li>將第2步和第3步中創建的實例輸入到 <code>CsvReader</code> 類別讀取</li>
    <li>通過繼承 CsvHelper 轉換 CSV 數據 <code>預設類型轉換器</code> 類別</li>
</ol>  

CsvHelper 功能特點

  • 快速:即時編譯類別以達到極高的效能
  • 彈性:寫入時保守,讀取時寬容
  • 易用性:讀寫操作就像 GetRecords 一樣簡單() 和 WriteRecords(記錄)
  • 高度可配置
  • Linux模式
  • 低內存使用

1. 建立主控台應用程式

使用以下步驟來建立主控台應用程式:

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

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

  • 點擊 下一步
  • 額外資訊 頁面中,指定您要使用的 框架版本。在此範例中,我們將使用 .NET Framework 4.8

創建專案 - .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 套件。您可以通過專案選單存取它,或者在方案總管中右鍵點擊您的專案來進行操作。

選擇-管理-NuGet-套件

  • 現在,從瀏覽標籤 -> 搜尋 IronXL.Excel -> 安裝

搜索 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. 在方案資源管理器中,右鍵點擊 Program.cs 文件,然後點擊 檢視代碼。
  2. 在程式碼文件的頂部添加以下 using 指令:
using IronXL;
using IronXL;
Imports IronXL
VB   C#

全部完成! IronXL 已經下載、安裝並準備好使用。然而,在此之前,我們應該先安裝 CsvHelper。

3. CsvHelper 安裝

3.1. 使用 NuGet Package Manager Console

要下載和安裝 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#

每個工作簿可以包含多個工作表物件。這些代表了 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#

資料類型是 IEnumerableCsvHelper 會自動將每個欄位映射到具有相同名稱的屬性。例如,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.10 剛剛發布

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