IronXL 與 CsvWriter 的比較
處理CSV文件可能是一項具有挑戰性的任務。 然而,今天有許多程式庫可以幫助開發者完成這項任務,而不需要安裝Microsoft Excel。
在本文中,我們將討論並比較如何在C# .NET技術中以程式方式處理Microsoft Excel文件,無論是在CSV格式還是標準Excel格式,使用兩個最受歡迎的程式庫,IronXL和CSVWriter。
首先讓我們來看看這兩個程式庫所提供的功能。
IronXL 程式庫
IronXL是一個.NET程式庫,用於輕鬆地使用C#讀取和編輯Microsoft Excel文件。 IronXL.Excel是一個獨立的.NET軟體程式庫,用於讀取多種電子錶格格式。 它不需要安裝Microsoft Excel,也不依賴于Interop。
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"] 語法。 直觀地組合和建立範圍。
- 排序——排序範圍、列和行。
- 樣式——單元格視覺樣式、字體、大小、背景圖案、邊框、對齊方式和數字格式。
CSVWriter
一個用於寫入CSV文件的.NET程式庫。 性能極其快速、靈活且易於使用。 支持寫入自訂類物件。
CsvWriter功能
- 快速:動態編譯類實現極快速的性能
- 靈活:寫入時保守,讀取時自由
- 易於使用:讀取和寫入就像
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網站並下載包來完成此操作。 步驟如下:
- Navigate to https://www.nuget.org/packages/IronXL.Excel
- 選擇"下載包"
- 雙擊下載的包
- 包將被安裝
- 重新載入您的Visual Studio項目並開始使用
2.3. 手動使用DLL安裝
下載並安裝IronXL C#程式庫的另一種方法是通過開發者命令提示字元安裝IronXLNuGet package。
- 打開開發者命令提示符——通常位於Visual Studio文件夾中。
- 輸入以下命令:
- 按下Enter
- 這將下載並安裝包
- 重新載入您的Visual Studio項目並開始使用
2.4. 新增必要的using指令
- 在解決方案資源管理器中,右鍵點擊Program.cs文件,然後點擊查看程式碼。
- 將以下using指令新增到程式碼文件的頂部:
using IronXL;Imports IronXLImports IronXL全部搞定了! IronXL已下载安装完毕,准备就绪。 然而,在此之前,我們應該安裝CsvHelper。
3. CSVWriter安裝
3.1. 使用NuGet包管理器控制台
使用CSVWriter工作時,您需要下載並安裝CsvHelper C#程式庫。 為此,利用以下步驟通過開發者命令提示字元安裝NuGet package。
- 打開開發者命令提示符——通常位於Visual Studio文件夾中。
- 輸入以下命令:
- 按下Enter
- 這將下載並安裝包
- 重新載入您的Visual Studio項目並開始使用
- 查看CsvHelper.CsvWriter方法詳細資訊以進行實現
3.2. 直接下載
Download from the NuGet website: 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 specify the format and delimiter
WorkBook workbook = WorkBook.LoadCSV("test.csv", fileFormat: ExcelFileFormat.XLSX, ListDelimiter: ",");
// Get the default worksheet
WorkSheet ws = workbook.DefaultWorkSheet;
// Save the workbook as an Excel file
workbook.SaveAs("CsvToExcelConversion.xlsx");// Load the CSV file and specify the format and delimiter
WorkBook workbook = WorkBook.LoadCSV("test.csv", fileFormat: ExcelFileFormat.XLSX, ListDelimiter: ",");
// Get the default worksheet
WorkSheet ws = workbook.DefaultWorkSheet;
// Save the workbook as an Excel file
workbook.SaveAs("CsvToExcelConversion.xlsx");' Load the CSV file and specify the format and delimiter
Dim workbook As WorkBook = WorkBook.LoadCSV("test.csv", fileFormat:= ExcelFileFormat.XLSX, ListDelimiter:= ",")
' Get the default worksheet
Dim ws As WorkSheet = workbook.DefaultWorkSheet
' Save the workbook as an Excel file
workbook.SaveAs("CsvToExcelConversion.xlsx")' Load the CSV file and specify the format and delimiter
Dim workbook As WorkBook = WorkBook.LoadCSV("test.csv", fileFormat:= ExcelFileFormat.XLSX, ListDelimiter:= ",")
' Get 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")' Load WorkBook
Dim workbook = WorkBook.Load("Spreadsheets\\sample.xlsx")每個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")' Open 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' 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
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()' 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()4.3. 將Excel文件重新保存為CSV文件
用IronXL編寫CSV文件是一個簡單的過程。 以下程式碼簡單地使用SaveAsCsv方法將Excel文件保存為CSV格式。
// Load the workbook
WorkBook wb = WorkBook.Load("Normal_Excel_File.xlsx");
// Save as .csv file
wb.SaveAsCsv("SaveAsCSV.csv", ",");
// Saved as : SaveAsCSV.Sheet1.csv// Load the workbook
WorkBook wb = WorkBook.Load("Normal_Excel_File.xlsx");
// Save as .csv file
wb.SaveAsCsv("SaveAsCSV.csv", ",");
// Saved as : SaveAsCSV.Sheet1.csv' Load the workbook
Dim wb As WorkBook = WorkBook.Load("Normal_Excel_File.xlsx")
' Save as .csv file
wb.SaveAsCsv("SaveAsCSV.csv", ",")
' Saved as : SaveAsCSV.Sheet1.csv' Load the workbook
Dim wb As WorkBook = WorkBook.Load("Normal_Excel_File.xlsx")
' Save as .csv file
wb.SaveAsCsv("SaveAsCSV.csv", ",")
' Saved as : SaveAsCSV.Sheet1.csv5. 使用CSVWriter處理CSV資料
將資料寫入CSV文件是一個常見操作。 CSVHelper方法CSVWriter與提供的分隔符處理所有字元和新行字元,在C#中非常簡單的CSV寫入器中釋放。 這裡我們將看看如何使用CSVWriter寫入資料。
5.1. 建立簡單的控制台應用程式
使用Visual Studio建立一個簡單的帶有提供分隔符的CSVWriter控制台應用程式。 專案建立完成後,下一步是建立一個Person類別:
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
public bool IsLiving { get; set; }
}public class Person
{
public int Id { get; set; }
public string Name { get; set; }
public bool IsLiving { get; set; }
}Public Class Person
Public Property Id() As Integer
Public Property Name() As String
Public Property IsLiving() As Boolean
End ClassPublic Class Person
Public Property Id() As Integer
Public Property Name() As String
Public Property IsLiving() As Boolean
End Class在Main方法中,讓我們現在製作一個Person物件的列表,我們將把它寫入CSV文件:
var myPersonObjects = new List<Person>()
{
new Person { Id = 1, IsLiving = true, Name = "John" },
new Person { Id = 2, IsLiving = true, Name = "Steve" },
new Person { Id = 3, IsLiving = true, Name = "James" }
};var myPersonObjects = new List<Person>()
{
new Person { Id = 1, IsLiving = true, Name = "John" },
new Person { Id = 2, IsLiving = true, Name = "Steve" },
new Person { Id = 3, IsLiving = true, Name = "James" }
};Dim myPersonObjects = New List(Of Person)() From {
New Person With {
.Id = 1,
.IsLiving = True,
.Name = "John"
},
New Person With {
.Id = 2,
.IsLiving = True,
.Name = "Steve"
},
New Person With {
.Id = 3,
.IsLiving = True,
.Name = "James"
}
}Dim myPersonObjects = New List(Of Person)() From {
New Person With {
.Id = 1,
.IsLiving = True,
.Name = "John"
},
New Person With {
.Id = 2,
.IsLiving = True,
.Name = "Steve"
},
New Person With {
.Id = 3,
.IsLiving = True,
.Name = "James"
}
}5.2. 使用預設設置寫入CSV文件
CsvHelper已成為在C#中使用CSVWriter方法寫入CSV的標準方式,而且非常易於使用:
using (var writer = new StreamWriter("filePersons.csv"))
using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
{
csv.WriteRecords(myPersonObjects);
}using (var writer = new StreamWriter("filePersons.csv"))
using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
{
csv.WriteRecords(myPersonObjects);
}Using writer = New StreamWriter("filePersons.csv")
Using csv = New CsvWriter(writer, CultureInfo.InvariantCulture)
csv.WriteRecords(myPersonObjects)
End Using
End UsingUsing writer = New StreamWriter("filePersons.csv")
Using csv = New CsvWriter(writer, CultureInfo.InvariantCulture)
csv.WriteRecords(myPersonObjects)
End Using
End Using5.3. 附加資料
我們需要記住,每次我們運行程式時,舊的CSV文件將被覆蓋。 有時候我們希望資料附加到文件末尾,而不是覆蓋現有資料。 CSVWriter不提供執行此操作的方法,因為打開/寫入文件不是提供分隔符的CSVWriter的責任。 我們可以通過使用FileStream來實現這一點,然後使用該FileStream構建我們的StreamWriter。 儘管這不在本文的範圍內,但我將向您展示如何做到這一點,因為這是任何應用程式的重要組成部分。
var configPersons = new CsvConfiguration(CultureInfo.InvariantCulture)
{
HasHeaderRecord = false
};
using (var stream = File.Open("filePersons.csv", FileMode.Append))
using (var writer = new StreamWriter(stream))
using (var csv = new CsvWriter(writer, configPersons))
{
csv.WriteRecords(myPersonObjects);
}var configPersons = new CsvConfiguration(CultureInfo.InvariantCulture)
{
HasHeaderRecord = false
};
using (var stream = File.Open("filePersons.csv", FileMode.Append))
using (var writer = new StreamWriter(stream))
using (var csv = new CsvWriter(writer, configPersons))
{
csv.WriteRecords(myPersonObjects);
}Dim configPersons = New CsvConfiguration(CultureInfo.InvariantCulture) With {.HasHeaderRecord = False}
Using stream = File.Open("filePersons.csv", FileMode.Append)
Using writer = New StreamWriter(stream)
Using csv = New CsvWriter(writer, configPersons)
csv.WriteRecords(myPersonObjects)
End Using
End Using
End UsingDim configPersons = New CsvConfiguration(CultureInfo.InvariantCulture) With {.HasHeaderRecord = False}
Using stream = File.Open("filePersons.csv", FileMode.Append)
Using writer = New StreamWriter(stream)
Using csv = New CsvWriter(writer, configPersons)
csv.WriteRecords(myPersonObjects)
End Using
End Using
End Using附加在現有文件上是棘手的,因為附加時順序可能會更改,或者我們可能已新增新屬性。 我們應該確保在附加時考慮到這一點。
6. 授權
IronXL是公開商業的C# Excel庫。 它是免費的開發且可以隨時用於商業部署。 授權可用於單一專案使用、單一開發人員、代理和全球企業以及SaaS和OEM再分發。 所有授權包括30天退費保證、為期一年的產品支援及更新、開發/測試/生產環境的有效性,以及永久授權(一鍵購買)。 Lite 套件從$999開始。
CSVWriter提供分隔符是一個逗號分隔元素,完全免費供商業友好使用。
7. 總結與結論
摘要
IronXL是一個完整的程式庫,提供您需要的所有功能來操作Excel文件。它提供從各種格式轉換到XLSX的設施,也可以從XLSX轉換為其他格式,例如CSV。這種相互轉換為使用者提供了輕鬆操作其他文件格式的靈活性。
另一方面,CSVWriter僅能處理CSV文件格式,並且選項非常有限。 使用者不能在不同文件格式之間切換,而使用IronXL則可以。 所有程式碼樣本均可在CsvHelper文件文件中找到。 本文件提供如何在您的專案中使用CSVWriter的指南。
結論
IronXL在支持多格式操作方面比CSVHelper.CSVWriter具有明顯的優勢。 此外,您可以根據需要應用公式和樣式,而CsvHelper僅允許讀取和寫入CSV文件,並且選項有限。 此外,您無法將新記錄附加到現有的CSV文件,因為它只是覆蓋以前的條目。
Curtis Chau擁有Carleton大學的電腦科學學士學位,專精於前端開發,擁有Node.js、TypeScript、JavaScript和React的專業知識。Curtis熱衷於建立直觀且美觀的使用者介面,喜愛使用現代框架並建立結構良好、視覺吸引力的手冊。
相關文章

