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 套件的文檔中找到。
如何在 C# 中使用 CsvHelper
- 安裝 CsvHelper C# 庫以讀取 CSV 文件
- 利用
CsvConfiguration類別設定 CSV 的配置 - 使用 C# 內建的
StreamReader開啟文件 - Input the instances made in steps 2 & 3 to
CsvReaderclass to read - 透過繼承 CsvHelper
DefaultTypeConverter類別來轉換 CSV 資料。
CsvHelper 功能
- 速度快:即時編譯類,效能極快
- 靈活:寫作時保守,閱讀時開放
- 易於使用:讀寫操作就像
GetRecords<t>()和WriteRecords(records)一樣簡單 - 高度可配置
- Linux 模式
- 記憶體佔用低
1. 建立控制台應用程式
請依照下列步驟建立控制台應用程式:
- 啟動 Visual Studio 2022 IDE。
- 點選"建立新項目"。
- 在"建立新項目"頁面中,從語言下拉清單中選擇C# ,從平台清單中選擇Windows ,從"項目類型"清單中選擇控制台。
- 從顯示的專案範本中選擇控制台應用程式 (.NET Framework) 。
建立專案 - 控制台應用程式
點選"下一步" 。
- 在"附加資訊"畫面中,指定您要使用的框架版本。 本範例將使用.NET Framework 4.8 。
建立專案 - .NET Framework
點擊"創建"完成該過程。
專案已經創建完成,我們幾乎可以開始測試庫了。 但是,我們仍然需要將它們安裝並整合到我們的專案中。 我們先來安裝IronXL。
2. IronXL C# 庫的安裝
您可以使用以下方法下載並安裝 IronXL 庫:
- 在 Visual Studio 中使用 NuGet 套件 2.直接下載 NuGet 套件
- 使用 DLL 檔案手動安裝
讓我們仔細看看每一個。
2.1. 在 Visual Studio 中使用 NuGet 套件
Visual Studio 提供 NuGet Package Manager,可在專案中安裝 NuGet 套件。 您可以透過專案功能表,或在解決方案總管中右鍵按一下專案來存取。
選擇-管理-NuGet-套件
現在,從瀏覽標籤中搜尋 IronXL.Excel 並安裝
搜尋 IronXL
好了,我們完成了。
2.2.直接下載 NuGet 套件。
您可以直接造訪 NuGet 網站並下載套件。 步驟如下
- 導航至https://www.nuget.org/packages/IronXL.Excel
- 選擇"下載軟體包" 按兩下下載的軟體包
- 該軟體包將會安裝
- 重新載入您的 Visual Studio 專案並開始使用。
2.3. 使用 DLL 手動安裝
下載和安裝 IronXL C# 庫的另一種方法是使用下列步驟透過開發人員命令提示字元安裝IronXL NuGet 套件。
- 開啟開發者命令提示字元-通常位於 Visual Studio 資料夾中。
- 輸入以下指令:
PM> Install-Package IronXL.Excel - 按回車鍵 這將下載並安裝該軟體包。
- 重新載入您的 Visual Studio 專案並開始使用。
2.4. 加入必要的 using 指令
- 在解決方案資源管理器中,右鍵點選 Program.cs 文件,然後按一下"檢視程式碼"。
- 在程式碼檔案的頂部新增以下 using 指令:
using IronXL;
using IronXL;
Imports IronXL
全部完成! IronXL 已下載、安裝完畢,可以使用了。 但在此之前,我們應該先安裝 CsvHelper。
3. CsvHelper 安裝
3.1. 使用 NuGet 套件管理器控制台
若要下載並安裝 CsvHelper C# 程式庫,請依照下列步驟透過開發人員命令提示字元安裝NuGet 套件。
- 開啟開發者命令提示字元-通常位於 Visual Studio 資料夾中。
- 輸入以下指令:
PM> 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")
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")
每個 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")
讀取單元格值的程式碼:
// 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
載入並讀取工作簿和工作表後,可以使用下列程式碼範例來變更公式或將其套用至特定儲存格。 代碼如下:
// 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()
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"
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
下面的程式碼用於讀取我們的 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
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
即使 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 檔案中新增記錄,因為這會直接覆蓋先前的條目。
常見問題解答
如何使用 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 設置,並使用 CsvReader 和 CsvWriter 輕鬆處理 CSV 文件操作。
CsvHelper 在處理 CSV 文件方面受歡迎的原因是什麼?
CsvHelper 以其速度、靈活性和易用性而聞名。它支持自定義類對象和類型轉換,使其成為專注於 CSV 數據處理的項目的首選。
使用 IronXL 有許可證需求嗎?
是的,在商業環境中部署 IronXL 需要付費許可證。這與 CsvHelper 的免費商業使用形成對比。
哪些類型的項目將最能受益於 IronXL?
需要廣泛操作各種 Excel 文件格式的項目,包括樣式設置、數據排序和公式計算等功能,由於 IronXL 的強大功能集,將最能從中受益。


