
如何在 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授權 | 從$999 | 從€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);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");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"));
}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");
}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);
}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呼叫
- 測試跨平台 - 驗證目標部署平台上的功能
對於涉及Excel圖表或條件格式的複雜遷移,IronXL提供了全面的支持。
瞭解限制
請注意,主要互操作程式集(PIA)不能在沒有安裝Excel的情況下運行—它們只不過是需要真實Office應用程式的COM物件的接口。 這種誤解通常導致在將應用程式部署到伺服器或嘗試在未安裝Office的情況下進行Excel自動化時遇到失敗。
關於安全性,IronXL進行定期的安全審計並保持DigiCert認證,提供企業級保護,沒有與COM介面相關的漏洞。 欲獲取詳細的安全資訊,請存取IronXL安全文件。
結論
雖然Excel Interop曾在桌面應用程式中發揮過作用,但現代開發需要比Excel程式庫更靈活的替代品。 IronXL提供了攥妥不使用Interop建立Excel文件的最全面的替代方案,結合了易用性、企業功能和跨平台支持。
無論您是構建雲應用程式、在Docker容器中工作,還是開發跨平台解決方案,選擇一個不需要安裝Excel的程式庫,對於建立可擴展和可維護的應用程式至關重要。 下載IronXL以立即改變您的Excel自動化工作流。

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



