如何在 C# 中建立 Excel 文件:Interop vs IronXL
介紹
程式生成Excel文件是許多C#應用程式中的基本需求。 雖然Microsoft.Office.Interop是傳統的C# Excel文件生成方法。 然而,它有一些限制,如需要安裝Microsoft Excel並依賴於主要互操作程式集。 現代的Excel程式庫替代品如IronXL允許您建立Excel工作簿、處理多個工作表、以及生成不需Microsoft Office的XLSX或CSV文件。本文比較了不同程式庫如何處理Excel文件建立,為.NET開發者提供範例程式碼和指導。
快速比較概覽
|
功能 |
Excel Interop |
IronXL |
EPPlus |
ClosedXML |
NPOI |
GemBox |
Aspose |
|---|---|---|---|---|---|---|---|
|
需要安裝Excel |
是 |
否 |
否 |
否 |
否 |
否 |
否 |
|
伺服器部署 |
不推薦 |
是 |
是 |
是 |
是 |
是 |
是 |
|
平台支持 |
僅限Windows |
跨平台 |
跨平台 |
跨平台 |
跨平台 |
跨平台 |
跨平台 |
|
XLS支持 |
是 |
是 |
否 |
否 |
是 |
是 |
是 |
|
XLSX支持 |
是 |
是 |
是 |
是 |
是 |
是 |
是 |
|
學習曲線 |
陡峭 |
簡單 |
簡單 |
簡單 |
中等 |
簡單 |
中等 |
|
商業授權 |
Office授權 |
從$liteLicense |
從€449 |
免費(MIT) |
免費(Apache) |
從€590 |
從$999 |
|
記憶體效率 |
差 |
卓越 |
好 |
好 |
差 |
卓越 |
好 |
注意:"Excel Interop"需要安裝Microsoft Excel,並附帶主要互操作程式集。 替代程式庫如IronXL允許您建立Excel文件、工作簿和工作表,而不需要Office,並支持xls、CSV文件和多個工作表。
為什麼要超越Excel Interop?
Microsoft.Office.Interop.Excel替代品是必要的,因為Excel Interop需要在每個運行應用程式的機器上安裝Microsoft Excel。 這種依賴性使得部署帶來挑戰,尤其是在Microsoft明確警告反對於伺服器自動化的情況下。 使用Interop而不安裝Excel會導致異常、警告訊息或無法成功建立Excel文件。 應用程式還會遭受COM依賴性問題、版本衝突和因為Excel在後台執行而造成的性能不佳。
現代的Excel程式庫,如IronXL,消除了這些問題。 您可以建立Excel文件、寫入資料至工作表、生成CSV或XML文件、處理新的Excel工作簿,而不依賴於Office、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消除了這些並發症,擁有不需Microsoft Office的現代直觀的Excel自動化API:
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或引用主要互操作程式集。 這使得它成為.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傳承使得API不如其他C# Excel程式庫直觀。
關鍵決策因素
什麼時候選擇IronXL
IronXL在需要跨平台Excel程式庫支持、全面的Excel功能和專業支援的企業應用程式中表現出色。 當您需要在未安裝Office的情況下建立Excel文件時,其直觀的API可以減少開發時間,而其穩健的性能可以有效處理大量資料集。 其內建的公式引擎和對多種格式(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引用
- 簡化物件建立 - 用直接的WorkBook建立替換Application/Workbook/Worksheet層次結構
- 更新單元格存取 - 從Cells[row, col]轉換為worksheet["A1"]標記
- 移除清理程式碼 - 消除Marshal.ReleaseComObject呼叫
- 測試跨平台 - 驗證目標部署平台上的功能
瞭解限制
請注意,主要互操作程式集(PIA)不能在沒有安裝Excel的情況下運行—它們只不過是需要真實Office應用程式的COM物件的接口。 這種誤解通常導致在將應用程式部署到伺服器或嘗試在未安裝Office的情況下進行Excel自動化時遇到失敗。
關於安全性,IronXL進行定期的安全審計並保持DigiCert認證,提供企業級保護,沒有與COM介面相關的漏洞。 欲獲取詳細的安全資訊,請存取IronXL安全文件。
結論
雖然Excel Interop曾在桌面應用程式中發揮過作用,但現代開發需要比Excel程式庫更靈活的替代品。 IronXL提供了攥妥不使用Interop建立Excel文件的最全面的替代方案,結合了易用性、企業功能和跨平台支持。
無論您是構建雲應用程式、在Docker容器中工作,還是開發跨平台解決方案,選擇一個不需要安裝Excel的程式庫,對於建立可擴展和可維護的應用程式至關重要。 下載IronXL以立即改變您的Excel自動化工作流。
常見問題
使用C#中的Excel Interop有哪些限制?
C#中的Excel Interop可能受到其依賴Microsoft Excel安裝、潛在的性能問題以及缺乏跨平台支持的限制。IronXL為電子表格操作提供了更高效和多功能的替代方案。
為什麼我應考慮使用IronXL而不是Excel Interop?
IronXL提供更強大的解決方案,具有跨平台功能、更快的性能和減少的記憶體使用。它不需要在伺服器上安裝Excel,這使其更適合於伺服器端應用程式。
IronXL能否高效處理大型資料集?
是的,IronXL經過優化以高效處理大型資料集。它比Excel Interop提供更好的性能和記憶體管理,使其非常適合處理大量資料。
IronXL與.NET Core相容嗎?
IronXL完全相容.NET Core,允許開發者建立能在多個平台上運作而不依賴於Microsoft Excel安裝的應用程式。
IronXL有哪些授權選項?
IronXL提供靈活的授權選項,包括單一開發者、團隊和企業授權,適合不同項目規模和預算。
IronXL支持將資料導出到Excel格式嗎?
IronXL支持將資料導出到多種Excel格式,如XLS、XLSX和CSV,提供滿足各種資料操作和展示需求的靈活性。
我可以使用IronXL來自動生成Excel報告嗎?
可以,IronXL設計用於促進自動化Excel報告的生成,提供資料篩選、圖表建立和公式處理等功能來簡化報告任務。
IronXL如何在Excel操作中確保資料準確性?
IronXL以其可靠的公式處理和單元格格式能力確保資料準確性,最小化錯誤並在Excel操作中保持資料完整性。
IronXL支持哪些程式語言?
IronXL主要設計用於C#,但也支持其他.NET語言,使其對於在.NET生態系統中工作的開發者來說是多用途的。
IronXL提供客戶支援嗎?
IronXL提供全面的客戶支援,包括文件、教程和直接協助,確保開發者能在項目中有效利用程式庫。




