IronXL 與 ClosedXML 的比較
IronXL和ClosedXML都是.NET程式庫,用於在不需要Microsoft Excel的情況下讀取、操作和寫入Excel文件。 這次比較涵蓋了他們的API和功能範圍,提供工作程式碼範例,以便您可以確定哪一個符合您專案的需求。
什麼是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是一個廣泛使用的.NET Core和.NET Framework Excel電子錶格庫,用於C#。
IronXL 功能集
- 載入、讀取和編輯XLS/XLSX/CSV/TSV中的資料
- 儲存和導出為XLS/XLSX/CSV/TSV/JSON
- System.Data物件:將Excel電子錶格作為System.Data.DataSet和System.Data.DataTable物件處理。
- 函式:處理Excel函式,每次編輯表格時重新計算。
- 範圍:易於使用的WorkSheet ["A1:B10"]語法。 直觀地組合和建立範圍。
- 排序:排序範圍、列和行。
- 造型:單元格視覺風格、字體、大小、背景圖案、邊框、對齊和數字格式。
可以通過此連結探索IronXL的更多功能。
ClosedXML
ClosedXML是一個.NET程式庫,用於讀取、操作和寫入Excel 2007+ (.xlsx, .xlsm)文件。 它旨在提供一個直觀且易於使用的介面,來處理底層的OpenXML庫。 .xlsx是Microsoft Excel使用的OpenXML底層API電子錶格文件格式的文件擴展名。 .xlsm文件支持宏。 .xltm是啟用宏的模板文件。 .xls格式是一種專有的二進位格式,而.xlsx基於Office OpenXML格式。
ClosedXML是一個.NET程式庫,用於在不需要安裝Excel於運行程式碼的機器上的情況下在Microsoft Excel中生成報告。
ClosedXML功能
ClosedXML具有使用者友好的介面,並具有廣泛的API功能來處理Excel中的內容建立和提取。 使用這些API調用和拉取請求,您可以修改Excel表或工作簿中的每一個小細節。 所有功能如下所示:
- 函式
- 驗證
- 超連結
- 保護(工作表和單元格級別)
- 條件格式化
- 凍結窗格
- 表格
- 範圍
- 造型
- 頁面設置(列印)
- 自動篩選
- 評論
下表提供了IronXL與ClosedXML的主要差異的對比。
| 功能 | IronXL | ClosedXML |
|---|---|---|
| XLS格式支持 | 是 | 否 |
| XLSX格式支持 | 是 | 是 |
| CSV/TSV導入與導出 | 是 | 否 |
| HTML導出 | 是 | 否 |
| JSON導出 | 是 | 否 |
| 執行緒安全 | 是 | 否 |
| 函式引擎 | 完整重新計算 | 部分函式支持 |
| 授權 | 商業(開發免費) | MIT(免費) |
IronXL提供開發使用免費; 免費的30天試用解鎖完整功能集以供評估。
本文余下内容如下:
- 建立控制台應用程式
- 安裝IronXL C#程式庫
- 安裝ClosedXML
- 建立並保存新的Excel工作簿和工作表
- 讀取Excel文件
- 操作Excel函式
- 授權
- 您應該選擇哪個程式庫?
1. 建立控制檯應用程式
請按以下步驟建立控制檯應用程式:
- 啓動Visual Studio 2022 IDE。
- 點擊"建立新專案。"
- 在"建立新專案"頁面中,從語言下拉列表中選擇C#,從平台列表中選擇Windows,從項目型別列表中選擇控制台。
- 從顯示的項目模板中選擇Console App (.NET Framework)。
建立專案
- 點擊下一步。
- 給專案命名為"DemoApp",然後點擊下一步。
DemoApp專案
- 在附加資訊螢幕中,指定您想要使用的框架版本。 在此範例中,我們將使用.NET Framework 6.0。
.NET Framework 6.0
- 點擊建立以完成過程。
現在,專案已建立,我們幾乎可以開始測試這些程式庫。 然而,我們仍然需要將它們安裝並整合到我們的項目中。 首先讓我們開始使用IronXL。
2. IronXL C# 程式庫安装
您可以使用以下方法下載和安裝IronXL程式庫:
- 使用Visual Studio和NuGet包。
- 手動安裝DLL。
讓我們仔細看看每一個。
2.1. 使用Visual Studio與NuGet包
Visual Studio提供NuGet包管理器用於在您的項目中安裝NuGet包。 您可以通過項目選單存取它,或者通過右鍵點擊您在解決方案資源管理器中的項目。
包管理器
- 接下來,從瀏覽選項卡中 > 搜索IronXL.Excel > 安裝
IronXL NuGet安裝
- 完成了。
2.2. 手動安裝DLL
另一種下載和安裝IronXL C#程式庫的方法是通過開發者命令提示符使用以下步驟來安裝IronXL NuGet包。
- 打開開發者命令提示符 — 通常在Visual Studio文件夾中可以找到。
輸入以下命令:
Install-Package IronXL.Excel
- 按回车。
- 這將下載並安裝包。
- 重新加载您的Visual Studio项目并开始使用。
2.3. 新增必要的Using指令
- 在方案資源管理器中,右鍵點擊Program.cs文件,然後點擊查看程式碼。
- 將以下using指令新增到程式碼文件的頂部:
using IronXL;
using IronXL;
Imports IronXL
全部搞定了! IronXL已下载安装完毕,准备就绪。 不過,在這之前,我們應該安裝ClosedXML。
3. 安裝ClosedXML
要安裝ClosedXML包,您可以直接從NuGet或在程式專案中的NuGet包管理器/控制台下載。
欲直接安裝ClosedXML,請點擊此連結。
3.1. 使用NuGet包管理器/控制台
從專案解決方案資源管理器中打開NuGet包管理器,瀏覽ClosedXML,並點擊安裝。
ClosedXML NuGet安裝
或者:
- 打開開發者命令提示符 — 通常在Visual Studio文件夾中可以找到。
輸入以下命令:
Install-Package ClosedXML
- 按回车。
- 這將下載並安裝包。
- 重新加载您的Visual Studio项目并开始使用。
3.2. 新增必要的Using指令
- 在方案資源管理器中,右鍵點擊Program.cs文件,然後點擊查看程式碼。
- 將以下using指令新增到程式碼文件的頂部:
using ClosedXML.Excel;
using ClosedXML.Excel;
Imports ClosedXML.Excel
4. 建立並保存新的Excel工作簿和工作表
工作簿是一個包含多張工作表及行列的Excel文件。 兩個程式庫都提供了建立新的Excel工作簿和工作表的功能。 讓我們一步步看看程式碼,您還可以找到額外的IronXL程式碼範例以供進一步參考。
4.1. 使用IronXL建立新的Excel工作簿和工作表
使用IronXL建立一個新的Excel工作簿只需一行程式碼。 將以下內容新增到您的Program.cs文件中的靜態void主函式中:
// Create a new Excel workbook using IronXL
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
// Create a new Excel workbook using IronXL
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
' Create a new Excel workbook using IronXL
Dim workbook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX)
使用IronXL可以创建XLS(旧版Excel文件)和XLSX(当前和较新版本)文件格式。
這讓建立預設工作表更加簡單:
// Create a new worksheet within the workbook
var worksheet = workbook.CreateWorkSheet("IronXL Features");
// Create a new worksheet within the workbook
var worksheet = workbook.CreateWorkSheet("IronXL Features");
' Create a new worksheet within the workbook
Dim worksheet = workbook.CreateWorkSheet("IronXL Features")
您現在可以使用工作表變數設置單元格值,並執行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
保存Excel文件:
// Save the spreadsheet
workbook.SaveAs("NewExcelFile.xlsx");
// Save the spreadsheet
workbook.SaveAs("NewExcelFile.xlsx");
' Save the spreadsheet
workbook.SaveAs("NewExcelFile.xlsx")
輸出文件如下所示:
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")
輸出文件如下所示:
電子錶格文件輸出
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")
每一個WorkBook都可以在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")
讀取單元格值的程式碼:
// 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
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 the 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 the 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 the first sheet
Dim data = worksheet1.Cell("A1").GetValue(Of String)()
' Display on screen
Console.WriteLine(data)
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()
您还可以检索公式及其值:
// 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()
6.2. 使用ClosedXML操作Excel函式
ClosedXML的函式引擎涵蓋了許多常見功能,但並非所有的Excel函式都在其當前範圍內。 如果函式不支持或包含錯誤,該程式庫將拋出異常。 在部署至生產環境之前,值得測試您的函式。 讓我們看看如何使用它們。
// 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")
屬性 FormulaA1 參考A1單元格。 如果您要引用其他單元格,您必須將其新增到Formula屬性中。 例如,FormulaC2。
7. 授權
IronXL是一個公開商業的C# Excel程式庫。 它是免費的開發且可以隨時用於商業部署。 授權可用於單項目使用、單一開發者、代理機構和全球公司,以及SaaS和OEM再分發。 所有授權包括30天退費保證、為期一年的產品支援及更新、開發/測試/生產環境的有效性,以及永久授權(一鍵購買)。 輕量包從 $999 開始。
IronXL授權包
對於ClosedXML,使用此DLL文件的應用程式無需獨立授權,無論是單次使用還是商業使用。 為了使任何解決方案能夠與ClosedXML一起工作,只需安裝公開可用的NuGet包"ClosedXML"。 ClosedXML基於MIT協議授權。 MIT協議是一個簡短且簡單的寬容協議,條件只要求保留版權和協議聲明。 授權作品、修改和更大的作品可以在不同條款下分發且不需要源程式碼。
ClosedXML授權
除了授權成本之外,整個項目成本還包括開發者在建立格式轉換流水線、管理並行工作負載的執行緒安全包裝器以及尋找ClosedXML範圍外功能所需的額外程式庫(如CSV或HTML導出)的時間。 對於計算多年項目生命週期成本的團隊來說,這些整合和維護時間常常超過開源和商業授權之間的差異。
8. 您應該選擇哪個程式庫?
摘要
IronXL 是一個全面的用於操作Excel文件的程式庫。 IronXL允許開發者在.NET應用程式和網站中讀取、生成和編輯Excel(及其他電子錶格文件)。 它作為一個單一的NuGet包,具有對XLS、XLSX、CSV、TSV、HTML和JSON的內建支持,涵蓋格式轉換、函式、造型及System.Data整合而無需其他依賴。
ClosedXML是一個.NET程式庫,用於讀取和寫入Excel文件,使開發者更容易建立Excel 2007+文件。 它提供了一種簡潔的面向物件方法來操作文件(類似於VBA),不必處理XML文件的麻煩。 它可以由任何.NET語言使用,如C#和Visual Basic(VB)。 它提供了許多OpenXML的功能,但一些功能,如宏、嵌入和圖表,並不在它目前的範圍內。
結論
IronXL 也在其他Excel操作中十分有用,如單元格資料格式、排序、單元格樣式。 它也可以將Excel電子錶格作為System.Data.DataSet和System.Data.DataTable處理。 它支持以主控台、網頁伺服器和桌面應用程式為基礎的應用程式。 它也支持在所有的作業系統平台上運行。
ClosedXML是一個輕量化的程式庫,使用OpenXML API來讀取、操作和寫入Excel文件,實現起來十分簡單。 它能夠很好地處理許多常見的Excel操作——如頁面設置、凍結窗格、超連結、表格和條件格式等——並且性能損耗極少。
無論是IronXL還是ClosedXML在處理Excel電子錶格操作上都相當穩定,且都不需要安裝Microsoft Office。 兩個程式庫的分歧在於架構範圍:IronXL提供內建執行緒安全——對於伺服器端或並行工作負載這是個重要的考慮點,而ClosedXML未設計為支持並行存取。 IronXL還支持格式互換(XLSX與CSV、HTML及JSON之間),這是一項超出ClosedXML集中功能設定的能力。 對於工作流程涉及跨多種文件格式的導入或導出的團隊來說,這種更廣泛的格式覆蓋減少了對其他第三方工具的需求。
現在,您可以在輕量包中獲得五種Iron產品,其價格僅為1名開發者的兩種產品價($suitePrice)並且根本無限制套裝為$unlimitedSuitePrice,可以節省高達60%。
準備好檢視IronXL如何符合您的專案了嗎? 下載免費的30天試用來探索這次比較所涵蓋的每一項功能。
常見問題
我如何在不使用Interop的情況下讀取C#中的Excel文件?
要在不使用Interop的情況下讀取C#中的Excel文件,您可以使用IronXL或ClosedXML之類的程式庫。這些程式庫不需要安裝Microsoft Excel,並提供了程式化讀取和操作Excel文件的方法。
使用IronXL進行Excel文件操作有哪些好處?
IronXL提供了使用者友好的API,支持多種電子表格格式,並提供排序、樣式設計和公式處理等操作。它還是執行緒安全的,並允許導出到各種格式,使其成為Excel文件操作的多功能工具。
IronXL能處理Excel公式嗎?
是的,IronXL可以處理Excel公式。它允許您在Excel文件中建立、評估和操作公式,為複雜的電子表格操作提供了強大的功能。
IronXL支持哪些平台?
IronXL支持多個平台,包括.NET Framework、.NET Core、Xamarin和Azure,使其成為跨不同環境工作的開發者的靈活選擇。
我如何使用C#將Excel文件轉換為HTML?
要使用C#將Excel文件轉換為HTML,您可以使用IronXL。它提供了將Excel文件導出為HTML格式的方法,方便在網頁上共享和顯示電子表格資料。
IronXL與ClosedXML在格式支持上的區別是什麼?
IronXL支持廣泛的格式,包括XLS、XLSX、CSV、TSV和JSON,並允許這些格式之間的轉換。ClosedXML則專注於使用OpenXML格式處理Excel 2007+(.xlsx,.xlsm)文件。
如何在C#專案中安裝IronXL?
您可以通過Visual Studio中的NuGet包管理器使用命令 Install-Package IronXL.Excel 安裝IronXL到C#專案中,或者手動將DLL新增到您的專案中。
在商業項目中使用IronXL有任何授權要求嗎?
是的,IronXL需要在商業項目中部署時擁有商業授權。它提供了多種授權選項,包括單一項目、開發者、代理商和公司授權,並提供30天退款保證。



