跳過到頁腳內容
使用 IRONXL

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

介紹

在許多 C# 應用程式中,以程式設計方式建立 Excel 檔案是一項基本要求。 雖然Microsoft.Office.Interop .使用 Interop 在 C# 中建立 Excel 檔案的傳統方法是 Excel。 但是,它也有一些局限性,例如需要安裝 Microsoft Excel 以及依賴主互通組件。 像IronXL這樣的現代 Excel 庫替代方案可讓您在不使用 Microsoft Office 的情況下建立 Excel 工作簿、處理多個工作表並產生 XLSX 或 CSV 檔案。本文比較了不同函式庫處理 Excel 檔案建立的方式,並為.NET開發人員提供了範例程式碼和指導。

快速對比概覽

特徵

Excel 互通

IronXL

EPPlus

封閉式 XML

非營利組織

GemBox

Aspose

需要安裝 Excel

是的

伺服器部署

不推薦

是的

是的

是的

是的

是的

是的

平台支援

僅限 Windows 系統

跨平台

跨平台

跨平台

跨平台

跨平台

跨平台

XLS 支援

是的

是的

是的

是的

是的

XLSX 支援

是的

是的

是的

是的

是的

是的

是的

學習曲線

簡單的

簡單的

簡單的

緩和

簡單的

緩和

商業許可

辦公許可證

來自 $liteLicense

449歐元起

免費(MIT)

免費(Apache)

590歐元起

999美元起

記憶體效率

貧窮的

出色的

好的

好的

貧窮的

出色的

好的

注意: "Excel 互通" 需要安裝 Microsoft Excel 以及主互通組件。 其他庫,例如IronXL,可讓您建立 Excel 檔案、工作簿和工作表,而無需 Office,並且支援 xlsx 檔案、CSV 檔案和多個工作表。

為什麼要超越 Excel 互通?

Microsoft.Office.Interop.Excel的替代方案至關重要,因為 Excel 互通 要求在執行應用程式的每台電腦上都安裝 Microsoft Excel。 這種依賴關係會為部署帶來挑戰,尤其是在伺服器環境中,因為微軟明確警告不要使用 Office 自動化。 不使用 Excel 而直接使用 Interop 會導致異常、警告訊息或以程式設計方式建立 Excel 文件的嘗試失敗。 由於 Excel 作為後台進程運行,應用程式還會遇到 COM 依賴問題、版本衝突和效能不佳等問題。

現代 Excel 庫,例如IronXL,可以消除這些問題。 您可以建立 Excel 文件、寫入資料到工作表、產生 CSV 或 XML 文件,以及使用新的 Excel 工作簿,而無需依賴 Office、Excel 應用程式物件或主互通組件。 開發人員還可以使用 Visual Studio、Visual Basic 或控制台應用程式項目,在 Windows 或跨平台環境中實現 Excel 自動化。

立即開始使用IronXL 的免費試用版,徹底消除這些依賴。

使用 Interop 建立 Excel 文件

我們先來看看使用 Excel 互通 的傳統方法:

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);
$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");
$vbLabelText   $csharpLabel

如何在 C# 中建立 Excel 檔案:Interop 與IronXL:圖 1 - IronXL輸出

IronXL可讓您以程式設計方式建立 Excel 檔案、新工作簿和多個工作表。 您無需安裝 Microsoft Excel 或引用主互通組件,即可寫入資料、顯示資料以及處理 XLS、XLSX、CSV 或 XML 檔案。 這使其成為一個完全託管的 Excel 庫,適用於.NET Framework、 .NET Core、控制台應用程式和跨平台環境。

由於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.Set不nCommercialPersonal("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.Set不nCommercialPersonal("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"));
}
$vbLabelText   $csharpLabel

如何在 C# 中建立 Excel 檔案:Interop 與IronXL:圖 2 - EPPlus 輸出

EPPlus 可讓您建立 Excel 電子表格、寫入和顯示數據,並匯出為 XLSX 檔案或 CSV 檔案。 但它不支援舊版 XLS 格式,商業用途需要商業許可。 使用.NET Core或.NET Framework 的開發人員可以透過NuGet套件將 EPPlus 整合到 Visual Studio 專案和控制台應用程式中。

封閉式 XML 方法

[封閉式 XML](https://github.com/封閉式 XML/封閉式 XML)提供了一個具有直覺式 API 的開源解決方案:

using 封閉式 XML.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 封閉式 XML.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");
}
$vbLabelText   $csharpLabel

如何在 C# 中建立 Excel 檔案:Interop 與IronXL:圖 3 - 封閉式 XML 輸出

封閉式 XML 支援 XLSX 檔案和 Excel 工作表,無需安裝 Microsoft Office 即可輕鬆建立 Excel 表格。 它可跨多個工作表運行,處理 CSV 和 XML 文件,並透過NuGet包整合到.NET專案中。

傳統支持方面的 非營利組織

非營利組織可以處理 XLS 和 XLSX 格式,但其 API 更為複雜:

using 非營利組織.SS.UserModel;
using 非營利組織.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 非營利組織.SS.UserModel;
using 非營利組織.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);
}
$vbLabelText   $csharpLabel

如何在 C# 中建立 Excel 檔案:Interop 與IronXL:圖 4 - 非營利組織 輸出

非營利組織 允許以程式設計方式建立 Excel 工作表和工作簿,支援多種文件格式,包括 CSV、XLSX 和 XLS 檔案。 然而,由於其 Java 的底層特性,與其他 C# Excel 程式庫相比,該 API 的直覺性較差。

關鍵決策因素

何時選擇IronXL

IronXL非常適合需要跨平台 Excel 庫支援、全面的 Excel 功能和專業支援的企業應用程式。 其直覺的 API 可減少在未安裝 Office 的情況下建立 Excel 檔案的開發時間,而強大的效能可有效率地處理大型資料集。 內建的公式引擎和多種格式(XLS、XLSX、CSV、TSV)的支援使其能夠靈活滿足各種業務需求。

其他考慮因素

EPPlus 非常適合已經使用 4.5.3 或更早版本(最後一個免費版本)的項目,或已經擁有 EPPlus 商業許可證的項目。 封閉式 XML 適用於具有基本電子表格需求且沒有圖表需求的開源專案。 當 XLS 支援至關重要且必須最大限度地降低許可成本時,非營利組織 仍然具有相關性。

與其他商業選項相比: GemBox.Spreadsheet提供與IronXL類似的功能,且價格具有競爭力;而Aspose.Cells則以較高的價格提供豐富的功能。 然而,IronXL 的功能、效能和支援相結合,通常能為 Excel 操作.NET專案提供最佳價值。

從 Interop 遷移到IronXL

從 Excel 互通 遷移到IronXL遵循一個簡單的模式。 如需詳細指導,請參閱IronXL文件並查看程式碼範例

  1. 移除 COM 參考 - 將Microsoft.Office.Interop.Excel引用替換為IronXL
  2. 簡化物件建立-以直接建立工作簿取代應用程式/工作簿/工作表層級結構。
  3. 更新儲存格存取方式 - 將 Cells[row, col] 轉換為 worksheet["A1"] 表示法
  4. 移除清理程式碼 - 消除 Marshal.ReleaseComObject 呼叫
  5. 跨平台測試 - 驗證目標部署平台上的功能

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

了解局限性

值得注意的是,主互通組件 (PIA) 如果沒有安裝 Excel 就無法運作——它們只是 COM 物件的接口,需要實際的 Office 應用程式才能運作。 這種誤解常常導致在將應用程式移轉到伺服器或嘗試在未安裝 Office 的情況下進行 Excel 自動化時部署失敗。

在安全性方面, IronXL定期接受安全審計並保持 DigiCert 認證,提供企業級保護,而不會出現與 COM 介面相關的漏洞。 有關詳細的安全信息,請訪問IronXL安全文件

結論

雖然 Excel 互通 在桌面應用程式中發揮了作用,但現代開發需要比 Excel 庫更靈活的替代方案。 IronXL為建立 Excel 檔案提供了最全面的替代方案,無需 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 提供全面的客戶支持,包括文檔、教程和直接援助,確保開發人員能夠有效利用這個庫於他們的項目中。

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

鋼鐵支援團隊

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