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 Framework, Xamarin, Mobile, 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文件中提供。
如何在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功能
- 快速:動態編譯類實現極快速的性能
- 靈活:寫入時保守,讀取時自由
- 易於使用:讀取和寫入如同
WriteRecords(records)一樣簡單 - 配置高度靈活
- Linux模式
- 低記憶體使用
1. 建立控制檯應用程式
請按以下步驟建立控制檯應用程式:
- 啟動Visual Studio 2022 IDE。
- 點擊"建立新項目"。
- 在"建立新項目"頁面中,選擇語言下拉列表的C#,從平台列表中選擇Windows,從"項目型別"列表中選擇控制台。
- 從顯示的項目模板中選擇控制台應用程式 (.NET Framework)。
建立項目 - 控制台應用程式
- 點擊下一步。
- 在附加資訊螢幕中,指定您想使用的Framework版本。 在此範例中,我們將使用.NET Framework 4.8。
建立項目 - .NET Framework
- 點擊建立以完成過程。
項目現在已建立,我們幾乎準備好測試這些程式庫。 然而,我們仍然需要將它們安裝並整合到我們的項目中。 首先讓我們安裝IronXL。
2. IronXL C# 程式庫安装
您可以使用以下方法下载并安装IronXL程式庫:
- 使用Visual Studio與NuGet包
- 直接下載NuGet包
- 使用DLL手動安裝
讓我們更詳細地看看每一個。
2.1. 使用Visual Studio和NuGet包
Visual Studio提供NuGet包管理器用於在您的項目中安裝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 - 按下Enter
- 這將下載並安裝包
- 重新載入您的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 - 按下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")
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")
每個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
IEnumerable<Person>。 CsvHelper會自動將每列映射到具有相同名稱的屬性。 例如,Person.FirstName。 然後我們可以遍歷data並存取每行中的值。
5.2. 在CSV文件中將資料從一種型別轉換為另一種型別
CSV文件通常包含文字資料。 例如,年齡列是一個整數值,而CSV文件僅包含文字。 CsvHelper可以將資料從字串轉換為標準的.NET型別(Boolean, Int32, Int64, Enum)。 在我們的例子中,我們有一個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
儘管Yes/No。 在這裡,我們需要子類化ConvertFromString方法。
6. 授權
IronXL是公開商業的C# Excel庫。 它是免費的開發且可以隨時用於商業部署。 授權可用於單專案使用、單開發者、代理商及全球公司,以及SaaS與OEM再分發。 所有授權包括30天退費保證、為期一年的產品支援及更新、開發/測試/生產環境的有效性,以及永久授權(一鍵購買)。 Lite套件價格從$999開始。
CsvHelper — 讀寫CSV文件對商業用途完全免費。
7. 總結與結論
摘要
IronXL是一個完整的庫,提供您所需的一切來操作Excel文件。它易於使用,並且為您提供將多種格式轉換為XLSX,以及從XLSX轉換為其他格式(例如CSV)的功能。這種格式互換為使用者提供了以簡單方式處理各種文件格式的靈活性。
另一方面,CsvHelper專為處理CSV文件格式而設計,即它只能處理CSV文件。 所有程式碼樣本均可在CsvHelper文件文件中找到。 文件為您提供了如何在您的項目中使用CsvHelper的指南。
結論
IronXL比CsvHelper具有明顯的優勢,因為它支持使用者處理多種格式。 此外,您可以根據喜好應用公式和樣式,而CsvHelper僅允許有限選項的CSV文件讀寫。 另外,您無法向現有的CSV文件新增新記錄,因為它只是覆蓋先前的條目。
常見問題
我如何使用 C# 將 Excel 文件轉換為不同格式?
using IronXL,您可以將 Excel 文件轉換為多種格式,例如 XLS、XLSX、CSV 和 TSV。這可以通過使用 IronXL 載入文件,然後使用其多功能的導出選項將其保存為所需格式來實現。
using IronXL 進行 Excel 文件操作有哪些好處?
IronXL 提供了綜合的功能來處理多種 Excel 格式,包括 XLS、XLSX 和 CSV。它支持資料操作、樣式設置和公式應用等功能,非常適合需要廣泛處理 Excel 文件的專案。相比之下,CsvHelper 是專為快速高效的 CSV 文件操作而設計的。
如何為 C# 項目安裝 IronXL?
您可以通過在 Visual Studio 中的 NuGet 套件管理器中搜索 'IronXL' 來安裝 IronXL。或者,您也可以直接下載 NuGet 套件或通過在您的專案中引用 DLL 來手動安裝。
IronXL 是否可以在沒有安裝 Microsoft Excel 的情況下使用?
是的,IronXL 不需要在您的系統上安裝 Microsoft Excel。它可以獨立運行以讀取、編輯和建立各種格式的 Excel 文件。
如何使用 CsvHelper 讀取和寫入 CSV 文件?
CsvHelper 允許您定義類來映射 CSV 記錄、配置 CsvHelper 設置,並使用 CsvReader 和 CsvWriter 來輕鬆處理 CSV 文件操作。
是什麼讓 CsvHelper 成為處理 CSV 文件的流行選擇?
CsvHelper 以其速度、靈活性和易用性而聞名。它支持自定義類別物件和型別轉換,使其成為專注於 CSV 資料處理的專案的首選。
using IronXL 是否有授權要求?
是的,在商業環境中部署 IronXL 需要付費授權。這與可免費用於商業用途的 CsvHelper 相對比。
哪些型別的專案最能從 IronXL 中受益?
需要大範圍的 Excel 文件格式操作功能的專案,包括樣式設置、資料排序和公式計算等功能,會最能從 IronXL 的強大功能集中受益。



