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)
此程式碼需要安裝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")

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公式和計算。
其他庫比較如何?
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

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

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

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文件並探索程式碼範例:
- 移除COM引用 - 用IronXL替換Microsoft.Office.Interop.Excel引用
- 簡化物件建立 - 用直接的
Worksheet階層 - 更新單元格存取 - 從
worksheet["A1"]符號 - 移除清理程式碼 - 消除
Marshal.ReleaseComObject調用 - 測試跨平台 - 驗證在目標部署平台上的功能
了解限制
需要注意的是,主Interop程式集(PIAs)在沒有安裝Excel的環境下無法運行——它們僅僅是對需要實際Office應用的COM物件的接口。 這種誤解常常導致應用程式遷移到伺服器上時部署失敗,或者在沒有安裝Office的情況下嘗試Excel自動化。
在安全性方面,IronXL經過常規的安全審計並保持DigiCert認證,提供企業級別的保護,沒有與COM接口相關的漏洞。 有關詳細的安全資訊,請存取IronXL安全文件。
結論
儘管Excel Interop在桌面應用上發揮了其作用,但現代開發需要更靈活的Excel程式庫替代方案。 IronXL為建立無需Interop的Excel文件提供了最全面的替代方案,結合了易用性與企業功能以及跨平台Excel支援。
無論您正在構建雲應用、使用Docker容器,還是開發跨平台解決方案,選擇不需要安裝Excel的庫對於建立可擴展和可維護的應用至關重要。 下載IronXL來立即改變您的Excel自動化工作流程。
常見問題
什麼是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提供專門的技術支援、詳細的文件和社區論壇,幫助開發者快速解決遇到的任何問題。


