跳過到頁腳內容
與其他組件的比較

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 框架、Xamarin、行動裝置、Linux、macOS 以及 Azure。

IronXL 是一個領先的 .NET 核心和 .net 框架的 C# Excel 試算表函式庫。

IronXL 功能集

  • 載入、讀取和編輯數據 — 從 XLS/XLSX/CSV/TSV
  • 儲存和導出 — 至 XLS/XLSX/CSV/TSV/JSON
  • 範圍 — 簡單易用的 WorkSheet ["A1:B10"] 語法。 直觀地組合和創建範圍。
  • 排序 — 排序範圍、列和行。
  • 樣式 — 單元格視覺樣式、字體、大小、背景樣式、邊框、對齊方式和數字格式。

CSVWriter

一個用於寫入 CSV 文件的 .NET 函式庫。 非常快速、靈活且易於使用。 支持寫入自定義類對象。

CsvWriter 特性

  • 快速:即時編譯類以獲得極快的性能
  • 靈活:編寫時保守,讀取時寬鬆
  • 易於使用:讀寫就像 GetRecords<T>()WriteRecords(records) 一樣簡單
  • 高可配置性
  • Linux 模式
  • 低記憶體使用量

1. 創建控制應用程式

使用以下步驟創建控制應用程式:

  • 啟動 Visual Studio 2022 IDE。
  • 點擊“創建新專案”。
  • 在“創建新項目”頁面,從語言下拉列表中選擇C#,從平台列表選擇Windows,從“專案類型”列表中選擇控制台
  • 從顯示的專案模板中選擇控制台應用程式 (.NET Framework)
class="content-img-align-center">
class="center-image-wrapper"> Csvhelper Alternatives 1 related to 1. 創建控制應用程式

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

  • 點擊下一步
  • 附加信息屏幕中,指定您想使用的框架版本。 在此範例中,我們將使用.NET Framework 4.8
class="content-img-align-center">
class="center-image-wrapper"> Csvhelper Alternatives 2 related to 1. 創建控制應用程式

創建專案 - .NET 框架

  • 點擊創建完成此過程。

現在專案已創建,我們幾乎準備好測試這些庫了。 然而,我們仍然需要在專案中安裝並集成它們。 讓我們先安裝 IronXL。

2. IronXL C# 函式庫安裝

您可以使用以下方法下載並安裝 IronXL 函式庫:

  1. 使用 Visual Studio 與 NuGet 套件
  2. 直接下載 NuGet 包
  3. 使用 DLL 手動安裝

讓我們看看每一個的詳細資訊。

2.1. 使用 Visual Studio 與 NuGet 套件

Visual Studio 提供 NuGet 包管理器來在專案中安裝 NuGet 套件。 您可以通過專案選單訪問它,或者在方案資源管理器中右鍵單擊您的項目。

class="content-img-align-center">
class="center-image-wrapper"> Csvhelper Alternatives 3 related to 2.1. 使用 Visual Studio 與 NuGet 套件

選擇-管理-NuGet-package

  • 現在,從瀏覽選項卡 -> 搜索 IronXL.Excel -> 安裝
class="content-img-align-center">
class="center-image-wrapper"> Csvhelper Alternatives 4 related to 2.1. 使用 Visual Studio 與 NuGet 套件

搜索 IronXL

  • 完成。

2.2. 直接下載 NuGet 套件

可以通過直接訪問 NuGet 網站下載套件。 步驟如下:

2.3. 使用 DLL 手動安裝

下載並安裝 IronXL C# 函式庫的另一種方法是使用以下步驟通過開發者命令提示安裝IronXL NuGet 程式包

  • 開啟開發者命令提示 —— 通常位於 Visual Studio 資料夾中。
  • 輸入以下命令:
    Install-Package IronXL.Excel
  • 按 Enter
  • 這將下載並安裝包
  • 重新載入您的 Visual Studio 專案並開始使用它

2.4. 添加必要的命名空間指令

  1. 在解決方案資源管理器中,右鍵單擊 Program.cs 文件,然後點選查看程式碼。
  2. 將以下 using 指令添加到代碼文件的頂部:
using IronXL;
using IronXL;
Imports IronXL
$vbLabelText   $csharpLabel

完成了! IronXL 已經下載並安裝完成,準備就緒。 但在此之前,我們應該安裝 CsvHelper。

3. CSVWriter 安裝

3.1. 使用 NuGet 套件管理器控制台

要使用 CSVWriter,您需要下載並安裝 CsvHelper C# 函式庫。 為此,請使用以下步驟通過開發者命令提示安裝NuGet 程式包

  • 開啟開發者命令提示 —— 通常位於 Visual Studio 資料夾中。
  • 輸入以下命令:
    Install-Package CsvHelper -Version 27.2.1
  • 按 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")
$vbLabelText   $csharpLabel

4.2. 使用 IronXL 讀取和操作已轉換的 CSV 文件

IronXLWorkBook 類代表一個 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")
$vbLabelText   $csharpLabel

每個 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")
$vbLabelText   $csharpLabel

讀取單元格值的代碼:

// 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
$vbLabelText   $csharpLabel

加載和讀取 WorkBook 和 WorkSheet 後,可以使用以下代碼示例來更改公式或對特定單元格應用公式。 代碼如下:

// 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()
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

5. 使用 CSVWriter 處理 CSV 數據

將數據寫入 CSV 文件是一種常見的操作。 CSVHelper 方法 CSVWriter 使用提供的分隔符非常簡單處理所有字符和換行字符的 CSV 編寫器已釋出給 C#。 在這裡,我們將了解如何使用 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 Class
$vbLabelText   $csharpLabel

在 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"
	}
}
$vbLabelText   $csharpLabel

5.2. 使用默認設置在 C# 中寫入 CSV 文件

CsvHelper 已經成為使用 CSVWriter 方法在 C# 中寫入 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 Using
$vbLabelText   $csharpLabel

5.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 Using
$vbLabelText   $csharpLabel

向現有文件追加內容的搶奪,因為當我們追加內容時,順序可能會更改,或者我們可能新增了新的屬性。 我們應該確保在追加時考慮到這一點。

6. 授權

IronXL is an openly commercial C# Excel library. It is free for development and can always be licensed for commercial deployment.Licenses are availablefor single-project use, single developers, agencies, and global corporations, as well as SaaS and OEM redistribution. 所有授權包括 30 天退款保證,一年的產品支持和更新,適用於開發/測試/生產的有效性,並且也是永久性許可證(一次性購買)。 Lite 套餐從$799開始。

提供分隔符的 CSVWriter 是一種逗號分隔元素,商業友好使用完全免費。

7. 摘要与結論

總結

IronXL 是一個完整的函式庫,提供您所需的一切來處理 Excel 文件。它提供了將各種格式轉換為 XLSX 以及將 XLSX 轉換為其他格式(如 CSV)的功能。這種互相轉換提供了用戶靈活地處理其他文件格式的便捷性。

另一方面,CSVWriter 僅處理 CSV 文件格式,選項非常有限。 用戶無法在不同文件格式之間切換,而 IronXL 則可以。 所有代碼示例都可以在 CsvHelper 文檔文件中找到。 本文檔提供了在您的項目中使用 CSVWriter 的指南。

結論

IronXL 在支持多種格式使用方面比 CsvHelper.CSVWriter 具有明顯的優勢。 此外,您可以根據自己的選擇應用公式和樣式,而 CsvHelper 只允許讀取和寫入 CSV 文件,選項有限。 此外,您無法將新記錄附加到現有的 CSV 文件,因為它只會覆蓋先前的條目。

常見問題解答

CSVWriter 處理 C# 中 Excel 文檔的替代方案有哪些?

IronXL 是處理 C# 中 Excel 文檔的 CSVWriter 的絕佳替代方案。它允許您讀取、編輯和導出各種 Excel 格式,例如 XLS、XLSX、CSV 和 TSV,而無需安裝 Microsoft Excel。

如何使用 .NET 庫將 CSV 文件轉換為 Excel 格式?

使用 IronXL,您可以輕鬆地將 CSV 文件轉換為 Excel 格式,方法是將 CSV 加載到工作簿中,然後將其保存為 XLSX 文件。這一過程涉及簡單的代碼命令來操作和保存文件。

IronXL 與 CSVWriter 相比有哪些優勢?

IronXL 與 CSVWriter 相比提供了多種優勢,包括支持多種文件格式、應用 Excel 公式的功能以及數據排序和樣式設置等高級功能。相反,CSVWriter 僅限於處理 CSV 文件。

如何在我的 C# 項目中安裝 IronXL?

您可以通過 Visual Studio 中的 NuGet 包管理器在您的 C# 項目中安裝 IronXL。或者,您可以下載 NuGet 包或通過開發者命令提示符手動安裝 DLL。

IronXL 可以在 .NET Core 和 Azure 環境中使用嗎?

是的,IronXL 支持多個平台,包括 .NET Core 和 Azure,使其成為開發需要跨不同環境操作 Excel 文件的應用程序的多功能選擇。

使用 CSVWriter 可以將自定義類對象寫入 CSV 文件嗎?

是的,CSVWriter 支持將自定義類對象寫入 CSV 文件。它提供了一種靈活且易於使用的方法來高效地寫入數據,同時處理 CSV 文件。

在商業應用中使用 IronXL 的許可要求是什麼?

IronXL 需要商業使用許可。開發過程中是免費的,但根據部署需求(無論是單個項目還是企業級應用)提供不同的許可。

IronXL 如何處理 Excel 公式?

IronXL 允許您在電子表格中應用和操作 Excel 公式,為在 C# 應用中提供動態數據計算和分析的強大功能。

使用 IronXL 的一些常見故障排除問題是什麼?

使用 IronXL 的常見故障排除問題可能包括文件格式兼容性、數據類型不匹配或安裝錯誤。確保項目引用設置正確並驗證數據格式可以幫助解決這些問題。

IronXL 可以將數據附加到現有的 Excel 文件嗎?

是的,IronXL 可以將數據附加到現有的 Excel 文件中。它允許您打開一個現有的工作簿,通過添加新數據進行修改,然後保存更改而不覆蓋現有內容。

Jordi Bardia
軟體工程師
Jordi 在 Python、C# 和 C++ 上最得心應手,當他不在 Iron Software 展現技術時,便在做遊戲編程。在分担产品测测试,产品开发和研究的责任时,Jordi 为持续的产品改进增值。他说这种多样化的经验使他受到挑战并保持参与, 而这也是他与 Iron Software 中工作一大乐趣。Jordi 在佛罗里达州迈阿密长大,曾在佛罗里达大学学习计算机科学和统计学。