與其他組件比較

IronXL 和 ClosedXML 的比較

當今的软件應用程序需要具備使用 Excel 文件創建數據庫和生成報表的能力。 如今,有許多函式庫可供使用者在不需要 Microsoft Excel 的情況下執行此操作。

在本文中,我們將討論並比較如何在 C# .NET 技術中使用兩個最受歡迎的程式庫——IronXL 和 ClosedXML 程式庫——以程式化方式處理 Microsoft Excel 文件,進行讀取、操作和寫入 Excel 報告。

IronXL 和 ClosedXML 都提供方法來在 .NET 框架中創建、編輯和讀取 Excel 文件。 接下來的問題是決定哪個 C# 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
  • System.Data 物件 --- 將 Excel 試算表作為 System.Data.DataSetSystem.Data.DataTable 物件使用。
  • 公式 --- 支援 Excel 公式。 每次編輯工作表時公式都會重新計算。
  • 範圍 — 易於使用的工作表 ["A1:B10"] 語法。 直觀地合併和創建範圍。
  • 排序 --- 整理範圍、欄位和列。
  • 樣式 --- 儲存格視覺樣式、字體、大小、背景圖案、邊框、對齊方式和數字格式。

    可以透過此連結探索IronXL的更多功能。

ClosedXML

ClosedXML 是一個 .NET 庫,用於讀取、操作和寫入 Excel 2007+ (.xlsx, .xlsm) 檔案。 它旨在提供一個直觀且易於使用的介面來處理底層的OpenXML庫。 .xlsx 是一個檔案副檔名,用於 OpenXML 基礎 API 試算表檔案格式,由 Microsoft Excel 使用。 .xlsm 檔案支援巨集。 .xltm 是啟用巨集的範本文件。 .xls 格式是專有的二進位格式,而 .xlsx 則基於 Office OpenXML 格式。

ClosedXML 是一個 .NET 程式庫,用於在 Microsoft Excel 中生成報告而不需在執行程式碼的機器上安裝 Excel

ClosedXML 功能

ClosedXML 提供使用者友好的界面,配有廣泛的 API 功能,以便處理 Excel 中內容的創建和提取。 透過這些 API 呼叫和拉取請求,您可以修改 Excel 工作表或活頁簿中的每一個細節。

所有功能列舉如下:

  1. 公式

  2. 驗證

  3. 超連結

  4. 保護(工作表和儲存格級別)

  5. 條件格式化

  6. 凍結窗格

  7. 表格

  8. 範圍

  9. 樣式

  10. 頁面設置(打印)

  11. 自動篩選

  12. 註解

    本文章的其餘部分如下:

  13. 建立主控台應用程式

  14. IronXL C# 程式庫安裝

  15. ClosedXML 安裝

  16. 創建並保存新的 Excel 工作簿和工作表

  17. 讀取 Excel 文件

  18. 使用 Excel 公式

  19. 授權

  20. 摘要與結論

1. 建立主控台應用程式

使用以下步驟來創建一個控制台應用程式:

  • 啟動 Visual Studio 2022 IDE。
  • 點擊「創建新專案。
  • 在「建立新專案」頁面中,從語言下拉列表中選擇C#,從平台列表中選擇Windows,從「專案類型」列表中選擇控制台
  • 從顯示的專案範本中選擇控制台應用程式 (.NET Framework)
    建立專案

    建立專案

  • 點擊下一步
  • 將專案命名為「DemoApp」,然後點擊下一步

    DemoApp 專案

    DemoApp 專案

  • 其他資訊畫面中,指定您要使用的框架版本。 在這個例子中,我們將使用.NET Framework 6.0

    .NET Framework 6.0

    .NET Framework 6.0

  • 點擊創建以完成此過程。

    現在專案已建立,我們幾乎準備好測試這些函式庫。 但是,我們仍然需要安裝並將它們整合到我們的專案中。 讓我們先安裝IronXL。

2. 安裝 IronXL C# 函式庫

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

  1. 使用 Visual Studio 與 NuGet 套件。

  2. 手動安裝DLL。

    讓我們仔細看看每一個。

2.1. 使用 Visual Studio 與 NuGet 套件

Visual Studio 提供 NuGet 套件管理器以在您的專案中安裝 NuGet 套件。 您可以通過專案選單存取它,或在方案總管中右鍵點擊您的專案。

套件管理器

套件管理器

  • 接下來,從瀏覽標籤中 > 搜尋 IronXL.Excel > 安裝

    IronXL NuGet 安裝

    IronXL NuGet 安裝

  • 我們完成了。

2.2. 手動安裝 DLL

另一種下載和安裝 IronXL C# 資料庫的方法是通過以下步驟使用開發者命令提示字元來安裝 IronXL NuGet 套件

  • 打開開發人員命令提示字元,通常可以在 Visual Studio 資料夾中找到。

    輸入以下命令:

Install-Package IronXL.Excel
  • 按下 Enter 鍵。
  • 這將下載並安裝套件。
  • 重新載入您的 Visual Studio 專案並開始使用它。

2.4. 添加必要的 Using 指令

  1. 在方案總管中,右鍵點擊Program.cs檔案,然後點擊查看代碼。

  2. 在程式碼檔案的頂部添加以下 using 指令:
using IronXL;
using IronXL;
Imports IronXL
$vbLabelText   $csharpLabel

完成! IronXL 已下載、安裝並準備使用。 但是,在此之前,我們應該安裝 ClosedXML。

3. 安裝 ClosedXML

要安裝 ClosedXML 套件,可以直接從 NuGet 或從專案中的 NuGet 套件管理員/主控台下載。

如需直接安裝 ClosedXML,請點選此[連結](https://www.nuget.org/packages/ClosedXML" target="_blank" rel="nofollow noopener noreferrer)。

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

從項目解決方案資源管理器中打開 NuGet 套件管理器,瀏覽 ClosedXML 並點擊安裝。

ClosedXML NuGet 安裝

ClosedXML NuGet 安裝

或:

  • 打開開發人員命令提示字元,通常可以在 Visual Studio 資料夾中找到。

    輸入以下命令:

PM> Install-Package ClosedXML
  • 按下 Enter 鍵。
  • 這將下載並安裝套件。
  • 重新載入您的 Visual Studio 專案並開始使用它。

3.2. 添加必要的使用指令

  1. 在方案總管中,右鍵點擊Program.cs檔案,然後點擊查看代碼。

  2. 在程式碼檔案的頂部添加以下 using 指令:
using ClosedXML.Excel;
using ClosedXML.Excel;
Imports ClosedXML.Excel
$vbLabelText   $csharpLabel

4. 建立並儲存新的 Excel 工作簿和工作表

工作簿是一個包含多個具有行和列的工作表的 Excel 文件。 這兩個庫都提供創建新 Excel 工作簿和工作表的功能。 讓我們一步一步地看看這段代碼。

4.1. 使用 IronXL 新增 Excel 工作簿和工作表

使用IronXL創建新的Excel工作簿再簡單不過。 只需一行代码。 真的。 將以下程式碼添加到 Program.cs 文件中的 static void main 函數:

WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
Dim workbook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX)
$vbLabelText   $csharpLabel

使用IronXL可以創建XLS(較舊版的Excel文件格式)和XLSX(當前和較新版的文件格式)文件格式。

而且,創建一個預設的工作表甚至更簡單:

var worksheet = workbook.CreateWorkSheet("IronXL Features");
var worksheet = workbook.CreateWorkSheet("IronXL Features");
Dim worksheet = workbook.CreateWorkSheet("IronXL Features")
$vbLabelText   $csharpLabel

現在您可以使用工作表變數來設置單元格值,並完成Excel文件幾乎所有能做的事情。

//Add data and styles to the new worksheet
worksheet ["A1"].Value = "Hello World";
worksheet ["A2"].Style.BottomBorder.SetColor("#ff6600");
worksheet ["A2"].Style.BottomBorder.Type = IronXL.Styles.BorderType.Double;
//Add data and styles to the new worksheet
worksheet ["A1"].Value = "Hello World";
worksheet ["A2"].Style.BottomBorder.SetColor("#ff6600");
worksheet ["A2"].Style.BottomBorder.Type = IronXL.Styles.BorderType.Double;
'Add data and styles to the new worksheet
worksheet ("A1").Value = "Hello World"
worksheet ("A2").Style.BottomBorder.SetColor("#ff6600")
worksheet ("A2").Style.BottomBorder.Type = IronXL.Styles.BorderType.Double
$vbLabelText   $csharpLabel

儲存 Excel 檔案:

//Save spreadsheet
workbook.SaveAs("NewExcelFile.xlsx");
//Save spreadsheet
workbook.SaveAs("NewExcelFile.xlsx");
'Save spreadsheet
workbook.SaveAs("NewExcelFile.xlsx")
$vbLabelText   $csharpLabel

輸出文件如下所示:

NewExcelFile 輸出

NewExcelFile 輸出

4.2. 使用 ClosedXML 新建 Excel 活頁簿和工作表

您也可以使用 ClosedXML 輕鬆建立 Excel 檔案(.xlsx、.xlsm)。 以下程式碼是生成簡單 Excel 文件並保存的典型範例。 您可以在您的工作簿中新增樣本工作表,並在您的 Excel 應用程式中為單元格指定值。

// Create a new empty Excel file.
var workbook = new XLWorkbook();

// Create a new worksheet and set cell A1 value to 'Hello world!'.
var worksheet = workbook.Worksheets.Add("ClosedXML Features");
worksheet.Cell("A1").Value = "Hello world!";

// Save to XLSX file.
workbook.SaveAs("Spreadsheet.xlsx");
// Create a new empty Excel file.
var workbook = new XLWorkbook();

// Create a new worksheet and set cell A1 value to 'Hello world!'.
var worksheet = workbook.Worksheets.Add("ClosedXML Features");
worksheet.Cell("A1").Value = "Hello world!";

// Save to XLSX file.
workbook.SaveAs("Spreadsheet.xlsx");
' Create a new empty Excel file.
Dim workbook = New XLWorkbook()

' Create a new worksheet and set cell A1 value to 'Hello world!'.
Dim worksheet = workbook.Worksheets.Add("ClosedXML Features")
worksheet.Cell("A1").Value = "Hello world!"

' Save to XLSX file.
workbook.SaveAs("Spreadsheet.xlsx")
$vbLabelText   $csharpLabel

輸出文件如下所示:

試算表文件輸出

試算表文件輸出

5. 讀取 Excel 文件 (匯入 Excel 文件)

這兩個庫都可以打開和讀取現有的 Excel 文檔。 讓我們來看看示範代碼。

5.1. 使用 IronXL 讀取 Excel 文件

IronXL WorkBook 類別代表一個 Excel 工作表。 要使用 C# 開啟 Excel 檔案,我們使用 WorkBook.Load 並指定檔案 (.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

5.2. 使用 ClosedXML 讀取 Excel 文件

ClosedXML 允許從您的 C# 應用程式中讀取先前建立的檔案。 您可以使用以下程式碼匯入 Excel 檔案。

// Import Excel File from file's path.
var workbook = new XLWorkbook("SimpleTemplate.xlsx");

// Read worksheet from workbook using sheet number.
var worksheet1 = workbook.Worksheet(1);

// Read cell value from first sheet
var data = worksheet1.Cell("A1").GetValue<string>();

// Display on screen
Console.WriteLine(data);
// Import Excel File from file's path.
var workbook = new XLWorkbook("SimpleTemplate.xlsx");

// Read worksheet from workbook using sheet number.
var worksheet1 = workbook.Worksheet(1);

// Read cell value from first sheet
var data = worksheet1.Cell("A1").GetValue<string>();

// Display on screen
Console.WriteLine(data);
' Import Excel File from file's path.
Dim workbook = New XLWorkbook("SimpleTemplate.xlsx")

' Read worksheet from workbook using sheet number.
Dim worksheet1 = workbook.Worksheet(1)

' Read cell value from first sheet
Dim data = worksheet1.Cell("A1").GetValue(Of String)()

' Display on screen
Console.WriteLine(data)
$vbLabelText   $csharpLabel

6. 使用 Excel 公式

Excel 公式是使用 Excel 工作時最重要的功能之一。 這兩個庫都有強大的公式計算引擎。它們提供了與公式一起工作的功能,並可以輕鬆地將它們應用到單元格中。

6.1. 使用 IronXL 處理 Excel 公式

載入工作簿和工作表後,可以使用以下代碼範例來更改公式或應用於特定儲存格。 代碼如下:

// Set Formulas
worksheet ["A1"].Formula = "=Sum(B8:C12)";
worksheet ["B8"].Formula = "=C9/C11";
worksheet ["G30"].Formula = "=Max(C3:C7)";
 .
// Force recalculating 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 recalculating 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 recalculating all formula values in all sheets.
workbook.EvaluateAll()
$vbLabelText   $csharpLabel

您還可以檢索公式及其值:

// Get the formula's calculated value.  e.g. "52"
string formulaValue = worksheet ["G30"].Value;

//Get the formula as a string. e.g. "Max(C3:C7)"
string formulaString = worksheet ["G30"].Formula;

//Save your changes with updated formulas and calculated values.
workbook.Save();
// Get the formula's calculated value.  e.g. "52"
string formulaValue = worksheet ["G30"].Value;

//Get the formula as a string. e.g. "Max(C3:C7)"
string formulaString = worksheet ["G30"].Formula;

//Save your changes with updated formulas and calculated values.
workbook.Save();
' Get the formula's calculated value.  e.g. "52"
Dim formulaValue As String = worksheet ("G30").Value

'Get the formula as a string. e.g. "Max(C3:C7)"
Dim formulaString As String = worksheet ("G30").Formula

'Save your changes with updated formulas and calculated values.
workbook.Save()
$vbLabelText   $csharpLabel

6.2. 使用 ClosedXML 操作 Excel 公式

ClosedXML 不支援所有公式,如果公式不被支援或是公式中有錯誤,您可能會遇到嚴重錯誤。 請在進入生產環境之前測試您的公式。 讓我們看看如何使用它們。

// Set Formulas
worksheet.Cell("A1").Value = "Hello World!";
worksheet.Cell("A2").FormulaA1 = "=MID(A1, 7, 5)";

// You can use Evaluate function to directly calculate formula,
var sum = worksheet.Evaluate("SUM(B1:B7)");

// Force recalculation
worksheet.RecalculateAllFormulas();

// Save Excel file
workbook.SaveAs("Formula Calculation.xlsx");
// Set Formulas
worksheet.Cell("A1").Value = "Hello World!";
worksheet.Cell("A2").FormulaA1 = "=MID(A1, 7, 5)";

// You can use Evaluate function to directly calculate formula,
var sum = worksheet.Evaluate("SUM(B1:B7)");

// Force recalculation
worksheet.RecalculateAllFormulas();

// Save Excel file
workbook.SaveAs("Formula Calculation.xlsx");
' Set Formulas
worksheet.Cell("A1").Value = "Hello World!"
worksheet.Cell("A2").FormulaA1 = "=MID(A1, 7, 5)"

' You can use Evaluate function to directly calculate formula,
Dim sum = worksheet.Evaluate("SUM(B1:B7)")

' Force recalculation
worksheet.RecalculateAllFormulas()

' Save Excel file
workbook.SaveAs("Formula Calculation.xlsx")
$vbLabelText   $csharpLabel

FormulaA1 屬性是參照 A1 儲存格。 如果您要引用其他儲存格,必須將其添加到 Formula 屬性中。 例如,FormulaC2。

7. 授權

IronXL 是一個開放商業的 C# Excel 函式庫。 它對於開發是免費的,並且可以隨時授權用於商業部署。提供授權,適用於單一專案使用、單一開發者、代理商和全球企業,以及SaaS和OEM重新分發。 所有授權均包括30天退款保證、一年產品支援和更新、開發/測試/生產環境的有效性,以及永久許可(一次性購買)。 輕量套件的起價為$749。

IronXL 授權方案

IronXL 授權方案

對於ClosedXML,使用此DLL文件的應用程式無論是單次使用還是商業用途,都不需要單獨的授權。 為了使任何解決方案都能與 ClosedXML 一起工作,只需安裝公開可用的 NuGet 套件 "ClosedXML"。 ClosedXML 授權於 MIT 授權。 MIT 授權是一項簡短且簡單的寬鬆授權,其條件僅要求保留版權和授權公告。 許可的作品、修改和更大範圍的作品可在不同條款下分發且不附帶源代碼。

ClosedXML 授權

ClosedXML 授權

8. 總結與結論

摘要

IronXL 是一個完整的庫,提供操控 Excel 文件所需的一切功能。IronXL 允許開發人員在 .NET 應用程序和網站中讀取、生成和編輯 Excel(以及其他電子表格)文件。 它提供了一種快速且自然的方法來使用 C# 處理 Excel 和其他電子表格文件。

ClosedXML 是一個用於讀寫 Excel 文件的 .NET 函式庫,使開發人員更容易建立 Excel 2007 及以後版本的文件。 它提供了一種良好的物件導向方式來操作文件(類似於VBA),而不需要處理XML文件的麻煩。 它可以被任何 .NET 語言使用,例如 C# 和 Visual Basic (VB)。 它提供了OpenXML的功能,但仍有一些尚未實現。 例如,巨集、嵌入和圖表。

結論

IronXL 在其他 Excel 操作中也很有幫助,例如儲存格資料格式、排序、儲存格樣式。 它也可以作為System.Data.DataSetSystem.Data.DataTable與Excel試算表一起工作。 它支持控制台、網頁伺服器和桌面應用程式。 它亦支援所有操作系統平台。

ClosedXML是一個輕量級的程式庫,使用OpenXML API來讀取、操作和寫入Excel應用程式,這樣的實現速度更快且更加簡單。 它有助於所有主要的 Excel 操作,例如頁面設定、凍結窗格、超連結、表格和條件格式設定。 它沒有開銷或低效能問題。

相比之下,IronXL 和 ClosedXML 在處理 Excel 試算表時都快速且準確。 在生成 Excel 報告時,無需安裝或擁有 Microsoft Office 授權。 然而,IronXL 相對於 ClosedXML 的優勢在於 ClosedXML 不是線程安全的。 IronXL 使用方便,並提供將其他格式轉換為 XLSX 的功能,也可將 XLSX 轉換成其他格式,如 CSV 和 HTML。 ClosedXML 不允許此轉換。 這種互換性讓用戶能夠輕鬆地與其他文件格式合作。

現在,您可以以僅購買兩個產品的價格獲得五個 Iron 產品,1 位開發人員的 Lite 套裝價格為 $1,498,無限版價格為 $5,998,節省高達 60%。

里根普恩
軟體工程師
Regan 畢業於雷丁大學,擁有電子工程學士學位。在加入 Iron Software 之前,他的工作角色讓他專注於單一任務;而他在 Iron Software 工作中最喜歡的是他所能承擔的工作範圍,無論是增加銷售價值、技術支持、產品開發或市場營銷。他喜歡了解開發人員如何使用 Iron Software 庫,並利用這些知識不斷改進文檔和開發產品。
< 上一頁
IronXL 與 FastExcel for .NET 的比較
下一個 >
IronXL與GrapeCity Excel Viewer之比較