跳過到頁腳內容
使用 IRONXL

如何在 C# 中創建 Excel 文件:Interop vs IronXL

簡介

程式化創建 Excel 檔案是許多 C# 應用程式中的基本需求。 雖然用於 C# 中創建 Excel 檔案的傳統方法是使用 Microsoft.Office.Interop.Excel。 然而,這種方法存在一些限制,比如需要安裝 Microsoft Excel 並依賴於 Primary Interop Assemblies。 現代 Excel 庫替代方案,如 IronXL,允許您在不需要 Microsoft Office 的情況下創建 Excel 工作簿,管理多個工作表,並生成 XLSX 或 CSV 文件。本文比較不同庫如何處理 Excel 文件創建,並為 .NET 開發者提供示例代碼及指導。

快速比較概覽

功能

Excel Interop

IronXL

EPPlus

ClosedXML

NPOI

GemBox

Aspose

Excel 安裝需求

伺服器部署

不推薦

平台支持

僅限 Windows

跨平台

跨平台

跨平台

跨平台

跨平台

跨平台

XLS 支援

XLSX 支援

學習曲線

陡峭

簡單

簡單

簡單

中等

簡單

中等

商業授權

Office 授權

從 $liteLicense 起

從 €449 起

免費 (MIT)

免費 (Apache)

從 €590 起

從 9 起

記憶體效能

優秀

良好

良好

優秀

良好

注意:“Excel Interop”需要安裝 Microsoft Excel,並配合 Primary Interop Assembly 使用。 替代庫,如 IronXL,允許您在不需要 Office 的情況下創建 Excel 文件、工作簿和工作表,並支援 xlsx 文件、CSV 文件和多個工作表。

為什麼要超越 Excel Interop?

Microsoft.Office.Interop.Excel 是必需的,因為 Excel Interop 需要每台運行應用程式的機器上都安裝 Microsoft Excel。 這種依賴性會帶來部署挑戰,特別是在 Microsoft 明確警告不推薦使用 Office 自動化的伺服器環境中。 在沒有 Excel 的情況下使用 Interop 將導致異常、警告信息或創建 Excel 文檔程式化的嘗試失敗。 應用程序還會受困於 COM 依賴性問題、版本衝突以及由於 Excel 作為背景過程運行而導致的差效能。

現代 Excel 庫,如 IronXL,消除了這些問題。 您可以創建 Excel 文件,向工作表寫入資料,生成 CSV 或 XML 文件,並使用新的 Excel 工作簿,而無需依賴 Office、Excel 應用程序物件或 Primary Interop Assembly。 開發者還可以使用 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);
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

如何創建 Excel 文件:Interop 與 IronXL:圖 1 - IronXL 輸出

IronXL 允許您以程式化的方式創建 Excel 文件、新工作簿和多個工作表。 您可以在未安裝 Microsoft Excel 或引用 Primary Interop Assembly 的情況下寫入數據、顯示數據,並處理 XLS、XLSX、CSV 或 XML 文件。 這使得它成為適用於 .NET Framework、.NET Core、控制台應用程序和跨平台環境的完全受控的 Excel 庫。

由於 IronXL 是通過 NuGet 包提供的,您可以直接將其添加到您的 Visual Studio 項目中,而無需擔心安裝 Microsoft Office。無需手動管理 Excel 應用程序對象或釋放 COM 對象,從而降低異常或警告信息的風險。 Learn more about creating Excel files with IronXL or explore Excel formulas and calculations.

立即開始使用 IronXL。
green arrow pointer

其他庫的比較

EPPlus 的實現

EPPlus offers a clean API but requires license configuration since version 5, as discussed in 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"));
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

如何創建 Excel 文件:Interop 與 IronXL:圖 2 - EPPlus 輸出

EPPlus 允許您創建 Excel 試算表,寫入和顯示數據,以及導出到 XLSX 文件或 CSV 文件。 然而,它不支持較舊的 XLS 格式,且商業用途需要商業授權。 在 .NET Core 或 .NET Framework 中工作的開發者可以將 EPPlus 通過 NuGet 包集成到 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");
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

如何創建 Excel 文件:Interop 與 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);
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

如何創建 Excel 文件:Interop 與 IronXL:圖 4 - NPOI 輸出

NPOI 支援以程式化方式創建 Excel 工作表和工作簿,支援多種文件格式,包括 CSV、XLSX 和 XLS 文件。 然而,由於其 Java 起源,其 API 與其他 C# Excel 庫相比不太直觀。

關鍵決策因素

何時選擇 IronXL

IronXL 在需要跨平台 Excel 庫支持、全面的 Excel 功能和專業支持的企業應用中表現出色。 其直觀的 API 減少了在不安裝 Office 的情況下創建 Excel 文件的開發時間,而強大的性能有效地處理大數據集。 內建的公式引擎和多格式支持(XLS、XLSX、CSV、TSV)使其在各種業務需求中變得多才多藝。

其他考量

EPPlus 適用於已使用版本 4.5.3 或更早版本(最後的免費版本)或具有現有 EPPlus 商業授權的專案。 ClosedXML 適合沒有圖表需求的開源項目,滿足基本試算表需求。 NPOI 在需要 XLS 支援且必須將授權成本降到最低時仍然是一個選擇。

For comparison with other commercial options: GemBox.Spreadsheet offers similar features to IronXL with competitive pricing, while Aspose.Cells provides extensive functionality at a premium price point. 然而,IronXL 的功能、性能和支持的結合常常在 .NET 專案的 Excel 操作中提供最佳價值。

從 Interop 遷移到 IronXL

從 Excel Interop 遷移到 IronXL 是遵循簡單模式。 For detailed guidance, see the IronXL documentation and explore code examples:

  1. 刪除 COM 引用 - 用 IronXL 替換 Microsoft.Office.Interop.Excel 引用
  2. 簡化物件創建 - 將 Application/Workbook/Worksheet 層次結構替換為直接 WorkBook 創建
  3. 更新單元格訪問 - 從 Cells[row, col] 轉換為 worksheet["A1"] 註釋
  4. 刪除清理代碼 - 消除 Marshal.ReleaseComObject 調用
  5. 測試跨平台 - 驗證目標部署平台的功能

For complex migrations involving Excel charts or conditional formatting, IronXL provides comprehensive support.

了解限制

重要的是要注意 Primary Interop Assemblies (PIAs) 在未安裝 Excel 的情況下無法運行——它們僅僅是對需要實際 Office 應用的 COM 物件的接口。 這種誤解經常導致應用程序轉移到伺服器或在沒有安裝 Office 的情況下嘗試 Excel 自動化時失敗。

在安全性方面,IronXL 經過定期安全審核,並保持 DigiCert 認證,提供企業級保護,而不受與 COM 介面相關的弱點影響。 有關詳細的安全性信息,請訪問 IronXL 安全性文檔

結論

雖然 Excel Interop 在桌面應用程序中達到了其目的,但現代開發需要更為靈活的 Excel 庫替代方案。 IronXL 提供了最全面的替代方案,無需使用 Interop 即可創建 Excel 文件,將易用性與企業功能及跨平台 Excel 支持結合在一起。

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

立即開始在您的項目中使用 IronXL 並免費試用。

第一步:
green arrow pointer

常見問題解答

在 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 提供全面的客戶支持,包括文檔、教程和直接援助,確保開發人員能夠有效利用這個庫於他們的項目中。

Jordi Bardia
軟體工程師
Jordi 在 Python、C# 和 C++ 上最得心應手,當他不在 Iron Software 展現技術時,便在做遊戲編程。在分担产品测测试,产品开发和研究的责任时,Jordi 为持续的产品改进增值。他说这种多样化的经验使他受到挑战并保持参与, 而这也是他与 Iron Software 中工作一大乐趣。Jordi 在佛罗里达州迈阿密长大,曾在佛罗里达大学学习计算机科学和统计学。