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

IronXL 與 CsvWriter 的比較

處理 CSV 檔案可能是一項具有挑戰性的任務。 然而,如今有許多函式庫可以幫助開發人員完成這項任務,而無需安裝 Microsoft Excel。

在本文中,我們將討論並比較如何使用兩個最受歡迎的函式庫 IronXL 和 CSVWriter,在 C# .NET 技術中以程式設計方式處理 Microsoft Excel 文件(無論是 CSV 格式還是標準 Excel 格式)。

我們先來看看這兩個圖書館分別提供了哪些功能。

IronXL圖書館

IronXL 是一個 .NET 函式庫,它能夠使用 C# 讀取和編輯 Microsoft Excel 文件。 IronXL.Excel 是一個獨立的 .NET 軟體庫,用於讀取各種電子表格格式。 它不需要安裝 Microsoft Excel,也不依賴 Interop。

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
  • 範圍 — 易於使用的工作表 ["A1:B10"] 語法。 直觀地組合和創建範圍。
  • 排序 — 對範圍、列和行進行排序。
  • 樣式 — 儲存格視覺樣式、字體、大小、背景圖案、邊框、對齊方式和數字格式。

CSV寫入器

一個用於寫入 CSV 檔案的 .NET 函式庫。 速度極快、靈活便利、易於使用。 支援編寫自訂類別物件。

CsvWriter 功能

  • 速度快:即時編譯類,效能極快
  • 靈活:寫作時保守,閱讀時開放
  • 易於使用:讀寫操作與GetRecords<T> ()一樣簡單GetRecords<T> ()WriteRecords(records)
  • 高度可配置
  • Linux 模式
  • 記憶體佔用低

1. 建立控制台應用程式

請依照下列步驟建立控制台應用程式:

  • 啟動 Visual Studio 2022 IDE。
  • 點選"建立新項目"。
  • 在"建立新項目"頁面中,從語言下拉清單中選擇C# ,從平台清單中選擇Windows ,從"項目類型"清單中選擇控制台
  • 從顯示的專案範本中選擇控制台應用程式 (.NET Framework)
Csvhelper Alternatives 1 related to 1. 建立控制台應用程式

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

點選"下一步"

  • "附加資訊"畫面中,指定您要使用的框架版本。 本範例將使用.NET Framework 4.8
Csvhelper Alternatives 2 related to 1. 建立控制台應用程式

建立專案 - .NET Framework

點擊"創建"完成該過程。

專案已經創建完成,我們幾乎可以開始測試庫了。 但是,我們仍然需要將它們安裝並整合到我們的專案中。 我們先來安裝IronXL。

2. IronXL C# 庫的安裝

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

  1. 在 Visual Studio 中使用 NuGet 套件 2.直接下載 NuGet 套件
  2. 使用 DLL 檔案手動安裝

讓我們仔細看看每一個。

2.1. 在 Visual Studio 中使用 NuGet 套件

Visual Studio 提供 NuGet Package Manager,可在專案中安裝 NuGet 套件。 您可以透過專案功能表,或在解決方案總管中右鍵按一下專案來存取。

Csvhelper Alternatives 3 related to 2.1. 在 Visual Studio 中使用 NuGet 套件

選擇-管理-NuGet-套件

現在,從瀏覽標籤中搜尋 IronXL.Excel 並安裝

Csvhelper Alternatives 4 related to 2.1. 在 Visual Studio 中使用 NuGet 套件

搜尋 IronXL

好了,我們完成了。

2.2.直接下載 NuGet 套件。

您可以直接造訪 NuGet 網站並下載套件。 步驟如下

2.3. 使用 DLL 手動安裝

下載和安裝 IronXL C# 庫的另一種方法是使用以下步驟透過開發人員命令提示字元安裝IronXLNuGet 套件

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

2.4. 加入必要的 using 指令

  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
  • 按回車鍵 這將下載並安裝該軟體包。
  • 重新載入您的 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

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

載入並讀取工作簿和工作表後,可以使用下列程式碼範例來變更公式或將公式套用至特定儲存格。 代碼如下:

// 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 提供分隔符,可以處理所有字元和換行符,這是一個非常簡單的 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 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 檔案中新增記錄,因為這會覆寫先前的條目。

常見問題解答

在 C# 中處理 Excel 文件,有哪些方法可以替代 CSVWriter?

IronXL.Excel 是 CSVWriter 的絕佳替代品,可用於在 C# 中處理 Excel 文件。它允許您讀取、編輯和匯出各種 Excel 格式,例如 XLS、XLSX、CSV 和 TSV,而不需要 Microsoft Excel。

如何使用 .NET 函式庫將 CSV 檔案轉換為 Excel 格式?

使用 IronXL,您可以輕鬆地將 CSV 檔案轉換為 Excel 格式,只要將 CSV 載入工作簿,然後將其儲存為 XLSX 檔案即可。這個過程涉及簡單的程式碼指令來操作和儲存檔案。

與 CSVWriter 相比,IronXL 有哪些優勢?

與 CSVWriter 相比,IronXL 具有多項優勢,包括支援多種檔案格式、可套用 Excel 公式,以及資料排序與樣式設計等進階功能。相比之下,CSVWriter 只限於處理 CSV 檔案。

如何在我的 C# 專案中安裝 IronXL?

您可以透過 Visual Studio 中的 NuGet Package Manager 在 C# 專案中安裝 IronXL。另外,您也可以下載 NuGet 套件,或透過 Developer Command Prompt 手動安裝 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 在佛罗里达州迈阿密长大,曾在佛罗里达大学学习计算机科学和统计学。