跳至頁尾內容
與其他組件的比較

using C# 建立 Excel 檔案:IronXL 和其他替代庫的比較

介紹

程式化建立Excel文件是許多C#應用程式的基本需求。 雖然傳統的在C#中使用Microsoft.Office.Interop.Excel來建立Excel文件的方法一直很受歡迎,但這種方法存在一些限制,例如需要安裝Microsoft Excel以及依賴主要Interop程式集。 像IronXL這樣的現代Excel程式庫替代方案允許您在不需要Microsoft Office的情況下建立Excel工作簿、處理多個工作表以及生成XLSX或CSV文件。本文比較了不同庫如何處理Excel文件的建立,並為.NET開發者提供範例程式碼和指導。

快速比較概述

功能 Excel Interop IronXL EPPlus ClosedXML NPOI GemBox Aspose
需要安裝Excel No No No No No
伺服器部署 不建議 Yes
平台支援 僅限Windows 跨平台 跨平台 跨平台 跨平台 跨平台 跨平台
XLS支援 No Yes
XLSX支援 Yes
學習曲線 陡峭 簡單 簡單 簡單 中等 簡單 中等
商業授權 Office授權 從$999起 從€449起 免費(MIT) 免費(Apache) 從€590起 從$999起
記憶體效率 極佳 良好 良好 極佳 良好

注意:"Excel Interop"需要安裝Microsoft Excel以及主要Interop程式集。 像IronXL這樣的替代程式庫允許您在不需要Office的情況下建立Excel文件、工作簿和工作表,並支援XLSX文件、CSV文件和多個工作表。

為什麼要超越Excel Interop?

Microsoft.Office.Interop.Excel替代選項是必要的,因為Excel Interop需要在每台運行應用程式的機器上安裝Microsoft Excel。 這種依賴性創造了部署的挑戰,尤其是在有Microsoft明確警告不要進行Office自動化的伺服器環境中。 在沒有Excel的情況下使用Interop會導致異常、警告消息或嘗試程式化建立Excel文件失敗。 由於Excel作為背景進程運行,應用程式還會面臨COM依賴性問題、版本衝突和性能差的問題。

現代的Excel程式庫(如IronXL)消除了這些問題。 您可以建立Excel文件、向工作表中寫入資料、生成CSV或XML文件,並且在不用依賴Office、Excel應用程式物件或主要Interop程式集的情況下處理新Excel工作簿。 開發者還可以使用Visual Studio、Visual Basic或控制檯應用專案來在Windows或跨平臺環境中實現Excel自動化。

立即開始使用IronXL的免費試用來完全消除這些依賴性。

使用Interop建立Excel文件

首先讓我們看看使用Excel Interop的傳統方法:

using Excel = Microsoft.Office.Interop.Excel;
// Create Excel application instance
Excel.Application excelApp = new Excel.Application();
Excel.Workbook workbook = excelApp.Workbooks.Add();
Excel.Worksheet worksheet = (Excel.Worksheet)workbook.Sheets[1];
// Add data to cells
worksheet.Cells[1, 1] = "Product";
worksheet.Cells[1, 2] = "Price";
worksheet.Cells[2, 1] = "Widget";
worksheet.Cells[2, 2] = 9.99;
// Save and cleanup
workbook.SaveAs(@"C:\temp\products.xlsx");
workbook.Close();
excelApp.Quit();
// Release COM objects
System.Runtime.InteropServices.Marshal.ReleaseComObject(worksheet);
System.Runtime.InteropServices.Marshal.ReleaseComObject(workbook);
System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp);
using Excel = Microsoft.Office.Interop.Excel;
// Create Excel application instance
Excel.Application excelApp = new Excel.Application();
Excel.Workbook workbook = excelApp.Workbooks.Add();
Excel.Worksheet worksheet = (Excel.Worksheet)workbook.Sheets[1];
// Add data to cells
worksheet.Cells[1, 1] = "Product";
worksheet.Cells[1, 2] = "Price";
worksheet.Cells[2, 1] = "Widget";
worksheet.Cells[2, 2] = 9.99;
// Save and cleanup
workbook.SaveAs(@"C:\temp\products.xlsx");
workbook.Close();
excelApp.Quit();
// Release COM objects
System.Runtime.InteropServices.Marshal.ReleaseComObject(worksheet);
System.Runtime.InteropServices.Marshal.ReleaseComObject(workbook);
System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp);
Imports Excel = Microsoft.Office.Interop.Excel

' Create Excel application instance
Dim excelApp As New Excel.Application()
Dim workbook As Excel.Workbook = excelApp.Workbooks.Add()
Dim worksheet As Excel.Worksheet = CType(workbook.Sheets(1), Excel.Worksheet)

' Add data to cells
worksheet.Cells(1, 1) = "Product"
worksheet.Cells(1, 2) = "Price"
worksheet.Cells(2, 1) = "Widget"
worksheet.Cells(2, 2) = 9.99

' Save and cleanup
workbook.SaveAs("C:\temp\products.xlsx")
workbook.Close()
excelApp.Quit()

' Release COM objects
System.Runtime.InteropServices.Marshal.ReleaseComObject(worksheet)
System.Runtime.InteropServices.Marshal.ReleaseComObject(workbook)
System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp)
$vbLabelText   $csharpLabel

此程式碼需要安裝Excel,手動進行COM物件的清理,並且無法在非Windows平台上運行。 當遇到需要處理多個工作表、保存為不同文件格式或在伺服器環境中工作時,複雜性會增加。 這就是為什麼許多開發者尋找不需要Microsoft Office的Excel程式庫的原因。

IronXL如何比較?

IronXL通過現代化、直觀的API解決了這些複雜問題,無需Microsoft Office即可進行Excel自動化:

using IronXL;
// Create workbook without Excel
WorkBook workbook = WorkBook.Create();
WorkSheet worksheet = workbook.CreateWorkSheet("Products");
// Add data using familiar syntax
worksheet["A1"].Value = "Product";
worksheet["B1"].Value = "Price";
worksheet["A2"].Value = "Widget";
worksheet["B2"].Value = 9.99;
// Apply formatting
worksheet["A1:B1"].Style.Font.Bold = true;
worksheet["B2"].FormatString = "$#,###";
// Save with one line
workbook.SaveAs("products.xlsx");
using IronXL;
// Create workbook without Excel
WorkBook workbook = WorkBook.Create();
WorkSheet worksheet = workbook.CreateWorkSheet("Products");
// Add data using familiar syntax
worksheet["A1"].Value = "Product";
worksheet["B1"].Value = "Price";
worksheet["A2"].Value = "Widget";
worksheet["B2"].Value = 9.99;
// Apply formatting
worksheet["A1:B1"].Style.Font.Bold = true;
worksheet["B2"].FormatString = "$#,###";
// Save with one line
workbook.SaveAs("products.xlsx");
Imports IronXL

' Create workbook without Excel
Dim workbook As WorkBook = WorkBook.Create()
Dim worksheet As WorkSheet = workbook.CreateWorkSheet("Products")

' Add data using familiar syntax
worksheet("A1").Value = "Product"
worksheet("B1").Value = "Price"
worksheet("A2").Value = "Widget"
worksheet("B2").Value = 9.99

' Apply formatting
worksheet("A1:B1").Style.Font.Bold = True
worksheet("B2").FormatString = "$#,###"

' Save with one line
workbook.SaveAs("products.xlsx")
$vbLabelText   $csharpLabel

使用Interop比較在C#中建立Excel文件:IronXL和替代庫:圖片1 - IronXL輸出

IronXL允許您程式化地建立Excel文件、新工作簿和多個工作表。 您可以寫入資料、顯示資料,並處理XLS、XLSX、CSV或XML文件,而不需要安裝Microsoft Excel或引用主要Interop程式集。 這使其成為適合.NET Framework、.NET Core、控制台應用和跨平台環境的完全託管Excel程式庫。

由於IronXL可以通過NuGet套件獲得,您可以直接將其新增到您的Visual Studio專案中,無需擔心安裝Microsoft Office。無需管理Excel應用程式物件或手動釋放COM物件,降低了異常或警告消息的風險。 了解更多有關使用IronXL建立Excel文件的資訊,或 探索Excel公式和計算

現在開始使用IronXL。
green arrow pointer

其他庫比較如何?

EPPlus實現

EPPlus提供了乾淨的API,但從版本5開始需要進行授權配置,正如Stack Overflow執行緒所討論:

using OfficeOpenXml;
// Set license context (required from v5+)
ExcelPackage.License.SetNonCommercialPersonal("Test");
using (var package = new ExcelPackage())
{
    var worksheet = package.Workbook.Worksheets.Add("Products");
    worksheet.Cells[1, 1].Value = "Product";
    worksheet.Cells[1, 2].Value = "Price";
    worksheet.Cells[2, 1].Value = "Widget";
    worksheet.Cells[2, 2].Value = 9.99;
    package.SaveAs(new FileInfo("products.xlsx"));
}
using OfficeOpenXml;
// Set license context (required from v5+)
ExcelPackage.License.SetNonCommercialPersonal("Test");
using (var package = new ExcelPackage())
{
    var worksheet = package.Workbook.Worksheets.Add("Products");
    worksheet.Cells[1, 1].Value = "Product";
    worksheet.Cells[1, 2].Value = "Price";
    worksheet.Cells[2, 1].Value = "Widget";
    worksheet.Cells[2, 2].Value = 9.99;
    package.SaveAs(new FileInfo("products.xlsx"));
}
Imports OfficeOpenXml

' Set license context (required from v5+)
ExcelPackage.License.SetNonCommercialPersonal("Test")

Using package As New ExcelPackage()
    Dim worksheet = package.Workbook.Worksheets.Add("Products")
    worksheet.Cells(1, 1).Value = "Product"
    worksheet.Cells(1, 2).Value = "Price"
    worksheet.Cells(2, 1).Value = "Widget"
    worksheet.Cells(2, 2).Value = 9.99
    package.SaveAs(New FileInfo("products.xlsx"))
End Using
$vbLabelText   $csharpLabel

使用Interop比較在C#中建立Excel文件:IronXL和替代庫:圖片2 - EPPlus輸出

EPPlus允許您建立Excel試算表、寫入和顯示資料,並匯出到XLSX或CSV文件。 然而,它不支持較舊的XLS格式,並且商業使用需要商業授權。 在.NET Core或.NET Framework中工作的開發者可以通過NuGet套件將EPPlus整合到Visual Studio專案和控制台應用中。

ClosedXML方法

ClosedXML 提供了一個具有直觀API的開源解決方案:

using ClosedXML.Excel;
using (var workbook = new XLWorkbook())
{
    var worksheet = workbook.Worksheets.Add("Products");
    worksheet.Cell("A1").Value = "Product";
    worksheet.Cell("B1").Value = "Price";
    worksheet.Cell("A2").Value = "Widget";
    worksheet.Cell("B2").Value = 9.99;
    workbook.SaveAs("products.xlsx");
}
using ClosedXML.Excel;
using (var workbook = new XLWorkbook())
{
    var worksheet = workbook.Worksheets.Add("Products");
    worksheet.Cell("A1").Value = "Product";
    worksheet.Cell("B1").Value = "Price";
    worksheet.Cell("A2").Value = "Widget";
    worksheet.Cell("B2").Value = 9.99;
    workbook.SaveAs("products.xlsx");
}
Imports ClosedXML.Excel

Using workbook As New XLWorkbook()
    Dim worksheet = workbook.Worksheets.Add("Products")
    worksheet.Cell("A1").Value = "Product"
    worksheet.Cell("B1").Value = "Price"
    worksheet.Cell("A2").Value = "Widget"
    worksheet.Cell("B2").Value = 9.99
    workbook.SaveAs("products.xlsx")
End Using
$vbLabelText   $csharpLabel

使用Interop比較在C#中建立Excel文件:IronXL和替代庫:圖片3 - ClosedXML輸出

ClosedXML支持XLSX文件和Excel工作表,使您無需安裝Microsoft Office即可輕鬆建立Excel表格。 它允許跨多個工作表工作,處理CSV和XML文件,並通過NuGet套件整合到.NET專案中。

NPOI用于舊版支持

NPOI支持處理XLS和XLSX格式,但API更複雜:

using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
IWorkbook workbook = new XSSFWorkbook();
ISheet worksheet = workbook.CreateSheet("Products");
IRow headerRow = worksheet.CreateRow(0);
headerRow.CreateCell(0).SetCellValue("Product");
headerRow.CreateCell(1).SetCellValue("Price");
IRow dataRow = worksheet.CreateRow(1);
dataRow.CreateCell(0).SetCellValue("Widget");
dataRow.CreateCell(1).SetCellValue(9.99);
using (FileStream file = new FileStream("products.xlsx", FileMode.Create))
{
    workbook.Write(file);
}
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
IWorkbook workbook = new XSSFWorkbook();
ISheet worksheet = workbook.CreateSheet("Products");
IRow headerRow = worksheet.CreateRow(0);
headerRow.CreateCell(0).SetCellValue("Product");
headerRow.CreateCell(1).SetCellValue("Price");
IRow dataRow = worksheet.CreateRow(1);
dataRow.CreateCell(0).SetCellValue("Widget");
dataRow.CreateCell(1).SetCellValue(9.99);
using (FileStream file = new FileStream("products.xlsx", FileMode.Create))
{
    workbook.Write(file);
}
Imports NPOI.SS.UserModel
Imports NPOI.XSSF.UserModel
Imports System.IO

Dim workbook As IWorkbook = New XSSFWorkbook()
Dim worksheet As ISheet = workbook.CreateSheet("Products")
Dim headerRow As IRow = worksheet.CreateRow(0)
headerRow.CreateCell(0).SetCellValue("Product")
headerRow.CreateCell(1).SetCellValue("Price")
Dim dataRow As IRow = worksheet.CreateRow(1)
dataRow.CreateCell(0).SetCellValue("Widget")
dataRow.CreateCell(1).SetCellValue(9.99)

Using file As FileStream = New FileStream("products.xlsx", FileMode.Create)
    workbook.Write(file)
End Using
$vbLabelText   $csharpLabel

使用Interop比較在C#中建立Excel文件:IronXL和替代庫:圖片4 - NPOI輸出

NPOI允許程式化建立Excel工作表和工作簿,支持多個文件格式,包括CSV、XLSX和XLS文件。 然而,由於其Java遺產,與其他C# Excel程式庫相比,其API不太直觀。

關鍵決策因素

何時選擇IronXL

IronXL在需要跨平台Excel程式庫支援、全面Excel功能和專業支援的企業應用程式中表現出色。 它的直觀API在不需要安裝Office的情況下可以減少開發時間,而強大的性能可以有效處理大型資料集。 內建的公式引擎和多種格式(XLS、XLSX、CSV、TSV)支援使其能夠滿足各種企業需求。

替代考量

EPPlus適用於已使用版本4.5.3或更早版本(最後免費版本)的專案或已擁有EPPlus商業授權的專案。 ClosedXML適合開源專案,具備基本試算表需求,且無需圖表功能。 當XLS支援至關重要且需要降低授權成本時,NPOI仍具有相關性。

要比較其他商用選項:GemBox.Spreadsheet提供與IronXL類似的功能和有競爭力的價格,而Aspose.Cells則提供全面的功能,價格較高。 然而,IronXL在功能、性能和支援的組合上往往為Excel操作.NET項目提供了最佳的價值。

從Interop遷移到IronXL

從Excel Interop遷移到IronXL遵循一個簡單的模式。 有關詳細指導,請參閱IronXL文件並探索程式碼範例

  1. 移除COM引用 - 用IronXL替換Microsoft.Office.Interop.Excel引用
  2. 簡化物件建立 - 用直接的Worksheet階層
  3. 更新單元格存取 - 從worksheet["A1"]符號
  4. 移除清理程式碼 - 消除Marshal.ReleaseComObject調用
  5. 測試跨平台 - 驗證在目標部署平台上的功能

對於涉及Excel圖表條件格式化的複雜遷移,IronXL提供全面的支持。

了解限制

需要注意的是,主Interop程式集(PIAs)在沒有安裝Excel的環境下無法運行——它們僅僅是對需要實際Office應用的COM物件的接口。 這種誤解常常導致應用程式遷移到伺服器上時部署失敗,或者在沒有安裝Office的情況下嘗試Excel自動化。

在安全性方面,IronXL經過常規的安全審計並保持DigiCert認證,提供企業級別的保護,沒有與COM接口相關的漏洞。 有關詳細的安全資訊,請存取IronXL安全文件

結論

儘管Excel Interop在桌面應用上發揮了其作用,但現代開發需要更靈活的Excel程式庫替代方案。 IronXL為建立無需Interop的Excel文件提供了最全面的替代方案,結合了易用性與企業功能以及跨平台Excel支援。

無論您正在構建雲應用、使用Docker容器,還是開發跨平台解決方案,選擇不需要安裝Excel的庫對於建立可擴展和可維護的應用至關重要。 下載IronXL來立即改變您的Excel自動化工作流程。

請注意EPPlus、ClosedXML、NPOI、GemBox和Aspose是其各自所有者的註冊商標。 本網站與EPPlus、ClosedXML、NPOI、GemBox或Aspose無關聯、無認可或無贊助。 所有產品名稱、標誌和品牌均為其各自所有者的財產。 比較僅供資訊參考,反映了撰寫時公開可用的資訊。

常見問題

什麼是Excel Interop,為什麼我可能需要替代品?

Excel Interop是用於在C#應用程式內操控Excel文件的Microsoft庫。可能需要替代品以獲得更佳效能、更簡單的部署,或避免依賴於Microsoft Office安裝。

IronXL與Excel Interop在建立電子表格方面如何比較?

IronXL提供更輕量級且更快的Excel Interop替代品,具有更簡單的部署,無需Microsoft Office安裝。它支持從C#直接建立、讀取和編輯Excel文件的廣泛功能。

與Excel Interop相比,IronXL有哪些授權選擇?

IronXL提供靈活的授權選擇,適合不同規模的項目,而Excel Interop與Microsoft Office授權綁定,可能不適合所有應用程式的部署。

IronXL可以在沒有安裝Microsoft Office的情況下使用嗎?

是的,IronXL不需要在伺服器或客戶端機器上安裝Microsoft Office,使其適合用於伺服器端和雲應用程式。

IronXL支持將Excel文件導出到其他格式嗎?

IronXL支持將Excel文件導出為CSV、TSV、JSON等格式,提供了用於共享和使用資料的多樣性。

使用IronXL可以讀取和編輯大尺寸的Excel文件嗎?

是的,IronXL優化以高效處理大尺寸Excel文件,提供快速處理時間和高水平的性能。

有哪些程式碼範例可用於IronXL的操作?

IronXL提供了廣泛的文件和程式碼範例,適用於各種使用案例,包括使用C#建立、讀取和編輯Excel文件。

IronXL提供哪些Excel Interop沒有的特定功能?

IronXL提供模板化文件生成、高級樣式設置和在無需Office安裝的情況下處理Excel文件的能力,這些功能並不在Excel Interop中提供。

把IronXL整合到現有的C#項目中有多容易?

IronXL設計為方便整合到現有的C#項目中,具有簡單明了的API和完善的支援,減少了管理Excel文件所需的程式碼複雜性。

IronXL為使用者提供什麼支援?

IronXL提供專門的技術支援、詳細的文件和社區論壇,幫助開發者快速解決遇到的任何問題。

Curtis Chau
技術作家

Curtis Chau擁有Carleton大學的電腦科學學士學位,專精於前端開發,擁有Node.js、TypeScript、JavaScript和React的專業知識。Curtis熱衷於建立直觀且美觀的使用者介面,喜愛使用現代框架並建立結構良好、視覺吸引力的手冊。

除了開發,Curtis對物聯網(IoT)有濃厚的興趣,探索創新的方法來整合硬體和軟體。在空閒時間,他喜歡玩遊戲和建立Discord機器人,結合他對技術的熱愛與創造力。

Iron 支援團隊

我們線上24小時,每週5天。
聊天
電子郵件
給我打電話