Tworzenie plików Excel w C# używając porównania Interop: IronXL i alternatywne biblioteki
Introduction
Programowe tworzenie plików Excel jest podstawowym wymogiem w wielu aplikacjach napisanych w języku C#. Chociaż tradycyjne podejście do tworzenia plików Excel w języku C# przy użyciu Microsoft.Office.Interop.Excel cieszy się popularnością, ma ono pewne ograniczenia, takie jak konieczność zainstalowania programu Microsoft Excel oraz zależność od głównych zestawów interop. Nowoczesne alternatywy dla bibliotek Excel, takie jak biblioteka IronXL, pozwalają tworzyć skoroszyty Excel, pracować z wieloma arkuszami oraz generować pliki XLSX lub CSV bez konieczności korzystania z pakietu Microsoft Office. W tym artykułe porównano sposoby obsługi tworzenia plików Excel przez różne biblioteki, podając przykładowy kod i wskazówki dla programistów .NET.
Szybki przegląd porównawczy
| Funkcja | Excel Interop | IronXL | EPPlus | ClosedXML | NPOI | GemBox | Aspose |
|---|---|---|---|---|---|---|---|
| Wymagana instalacja programu Excel | Tak | No | No | Nie | No | No | No |
| Wdrożenie na serwerze | Niezalecane | Tak | Tak | Tak | Yes | Tak | Tak |
| Obsługa platform | Tylko Windows | Wielopłatformowe | Wielopłatformowe | Wielopłatformowe | Wielopłatformowe | Wielopłatformowe | Wielopłatformowe |
| Obsługa plików XLS | Tak | Tak | No | Nie | Yes | Tak | Tak |
| Obsługa formatu XLSX | Tak | Tak | Tak | Tak | Yes | Tak | Tak |
| Krzywa uczenia się | Steep | Łatwe | Łatwe | Łatwe | Umiarkowany | Łatwe | Umiarkowany |
| Licencja komercyjna | Licencja Office | From $799 | Od 449 € | Bezpłatne (MIT) | Bezpłatne (Apache) | Od 590 € | Od 999 USD |
| Wydajność pamięci | Słabe | Doskonałe | Dobrze | Dobrze | Słabe | Doskonałe | Dobrze |
Uwaga: "Excel Interop" wymaga zainstalowania programu Microsoft Excel wraz z zestawem Primary Interop Assembly. Alternatywne biblioteki, takie jak IronXL, pozwalają tworzyć pliki Excel, skoroszyty i arkusze bez konieczności posiadania pakietu Office oraz obsługują pliki XLSX, CSV i wiele arkuszy.
Dłączego warto wyjść poza interoperacyjność z Excelem?
Alternatywy dla Microsoft.Office.Interop.Excel są niezbędne, ponieważ Excel Interop wymaga zainstalowania programu Microsoft Excel na każdym komputerze, na którym działa aplikacja. Ta zależność stwarza wyzwania związane z wdrażaniem, zwłaszcza w środowiskach serwerowych, gdzie Microsoft wyraźnie ostrzega przed automatyzacją pakietu Office. Korzystanie z Interop bez programu Excel powoduje wyjątki, komunikaty ostrzegawcze lub nieudane próby programowego tworzenia dokumentu Excel. Aplikacje borykają się również z problemami związanymi z zależnością od COM, konfliktami wersji oraz słabą wydajnością spowodowaną działaniem programu Excel w tle.
Nowoczesne biblioteki Excel, takie jak biblioteka IronXL, eliminują te problemy. Można tworzyć pliki Excel, zapisywać dane w arkuszach, generować pliki CSV lub XML oraz pracować z nowymi skoroszytami Excel bez konieczności korzystania z pakietu Office, obiektu aplikacji Excel lub zestawu Primary Interop Assembly. Programiści mogą również korzystać z projektów Visual Studio, Visual Basic lub aplikacji konsolowych w celu wdrożenia automatyzacji programu Excel w środowiskach Windows lub wielopłatformowych.
Zacznij korzystać z bezpłatnej wersji próbnej IronXL, aby całkowicie wyeliminować te zależności.
Tworzenie plików Excel za pomocą Interop
Najpierw przyjrzyjmy się tradycyjnemu podejściu z wykorzystaniem 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)
Ten kod wymaga instalacji programu Excel, ręcznego czyszczenia obiektów COM i nie będzie działał na platformach innych niż Windows. Złożoność wzrasta w przypadku obsługi wielu arkuszy, zapisywania w różnych formatach plików lub pracy w środowisku serwerowym. Właśnie dlatego wielu programistów poszukuje biblioteki Excel, która nie wymaga pakietu Microsoft Office.
Jak wypada IronXL na tle konkurencji?
IronXL eliminuje te komplikacje dzięki nowoczesnemu, intuicyjnemu API do automatyzacji Excela bez Microsoft Office:
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 pozwala programowo tworzyć pliki Excel, nowe skoroszyty i wiele arkuszy. Można zapisywać dane, wyświetlać dane oraz obsługiwać pliki XLS, XLSX, CSV lub XML bez zainstalowanego programu Microsoft Excel lub odwołania do biblioteki Primary Interop Assembly. Dzięki temu jest to w pełni zarządzana biblioteka Excel odpowiednia dla .NET Framework, .NET Core, aplikacji konsolowych i środowisk wielopłatformowych.
Ponieważ IronXL jest dostępny w pakiecie NuGet, można go dodać bezpośrednio do projektu Visual Studio bez martwienia się o instalację pakietu Microsoft Office. Nie ma potrzeby ręcznego zarządzania obiektem aplikacji Excel ani zwalniania obiektów COM, co zmniejsza ryzyko wystąpienia wyjątków lub komunikatów ostrzegawczych. Dowiedz się więcej o tworzeniu plików Excel za pomocą IronXL lub zapoznaj się z formułami i obliczeniami w Excelu.
Jak wypadają inne biblioteki w porównaniu?
Wdrożenie EPPlus
EPPlus oferuje przejrzysty interfejs API, ale od wersji 5 wymaga konfiguracji licencji, jak omówiono w wątkach na 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 umożliwia tworzenie arkuszy kalkulacyjnych Excel, zapisywanie i wyświetlanie danych oraz eksportowanie do plików XLSX lub CSV. Nie obsługuje jednak starszych formatów XLS, a do użytku komercyjnego wymagańa jest licencja komercyjna. Programiści pracujący w środowisku .NET Core lub .NET Framework mogą zintegrować EPPlus za pomocą pakietu NuGet z projektami Visual Studio i aplikacjami konsolowymi.
Podejście ClosedXML
ClosedXML oferuje rozwiązanie open source z intuicyjnym interfejsem 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 obsługuje pliki XLSX i arkusze Excel, co ułatwia tworzenie arkuszy Excel bez konieczności instalowania pakietu Microsoft Office. Działa w wielu arkuszach, obsługuje pliki CSV i XML oraz integruje się z projektami .NET za pośrednictwem pakietu NuGet.
NPOI dla obsługi starszych wersji
NPOI obsługuje zarówno formaty XLS, jak i XLSX, ale ma bardziej złożony interfejs 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 allows creating Excel worksheets and workbooks programmatically, supporting multiple file formats including CSV, XLSX, and XLS files. However, its Java heritage makes the API less intuitive compared to other C# Excel libraries.
Key Decision Factors
When to Choose IronXL
IronXL excels for enterprise applications requiring cross-platform Excel library support, comprehensive Excel features, and professional support. Its intuitive API reduces development time when you need to create Excel files without Office installed, while robust performance handles large datasets efficiently. The built-in formula engine and support for multiple formats (XLS, XLSX, CSV, TSV) make it versatile for various business requirements.
Alternative Considerations
EPPlus works well for projects already using version 4.5.3 or earlier (last free version) or those with existing EPPlus commercial licenses. ClosedXML suits open-source projects with basic spreadsheet needs and no charting requirements. NPOI remains relevant when XLS support is critical and licensing costs must be minimized.
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. However, IronXL's combination of features, performance, and support often provides the best value for Excel manipulation .NET projects.
Migration from Interop to IronXL
Migrating from Excel Interop to IronXL follows a straightforward pattern. For detailed guidance, see the IronXL documentation and explore code examples:
- Remove COM references - Replace Microsoft.Office.Interop.Excel references with IronXL
- Simplify object creation - Replace
Application/Workbook/Worksheethierarchy with directWorkBookcreation - Update cell access - Convert from
Cells[row, col]toworksheet["A1"]notation - Remove cleanup code - Eliminate
Marshal.ReleaseComObjectcalls - Test cross-platform - Verify functionality on target deployment platforms
For complex migrations involving Excel charts or conditional formatting, IronXL provides comprehensive support.
Understanding the Limitations
It's important to note that Primary Interop Assemblies (PIAs) cannot function without Excel installed—they're merely interfaces to COM objects that require the actual Office application. This misconception often leads to deployment failures when moving applications to servers or attempting Excel automation without Office installation.
Regarding security, IronXL undergoes regular security audits and maintains DigiCert certification, providing enterprise-grade protection without the vulnerabilities associated with COM interfaces. For detailed security information, visit the IronXL security documentation.
Wnioski
While Excel Interop served its purpose in desktop applications, modern development demands more flexible alternatives to the Excel library. IronXL provides the most comprehensive alternative for creating Excel files without Interop, combining ease of use with enterprise features and cross-platform Excel support.
Whether you're building cloud applications, working with Docker containers, or developing cross-platform solutions, selecting a library that doesn't require Excel installation is crucial for creating scałable and maintainable applications. Download IronXL to transform your Excel automation workflow today.
Często Zadawane Pytania
Czym jest Excel Interop i dlaczego mogę potrzebować alternatywnego rozwiązania?
Excel Interop to biblioteka firmy Microsoft służąca do manipulowania plikami Excel w aplikacjach napisanych w języku C#. Alternatywne rozwiązania mogą być potrzebne w celu uzyskania lepszej wydajności, łatwiejszego wdrożenia lub uniknięcia zależności od instalacji pakietu Microsoft Office.
Jak IronXL wypada w porównaniu z Excel Interop pod względem tworzenia arkuszy kalkulacyjnych?
IronXL oferuje lżejszą i szybszą alternatywę dla Excel Interop, charakteryzującą się łatwiejszym wdrożeniem i brakiem konieczności instalowania pakietu Microsoft Office. Obsługuje szeroki zakres funkcji, w tym tworzenie, odczytywanie i edycję plików Excel bezpośrednio z języka C#.
Jakie są opcje licencyjne dla IronXL w porównaniu z Excel Interop?
IronXL oferuje elastyczne opcje licencyjne dostosowane do projektów o różnej skali, podczas gdy Excel Interop jest powiązany z licencjami Microsoft Office, co może nie być odpowiednie dla wszystkich wdrożeń aplikacji.
Czy IronXL działa bez zainstalowanego pakietu Microsoft Office?
Tak, IronXL nie wymaga instalacji pakietu Microsoft Office na serwerze ani na komputerach klienckich, co czyni go idealnym rozwiązaniem dla aplikacji po stronie serwera i w chmurze.
Czy IronXL obsługuje eksport plików Excel do innych formatów?
IronXL obsługuje eksport plików Excel do formatów takich jak CSV, TSV, JSON i innych, zapewniając wszechstronność w zakresie udostępniania i wykorzystywania danych.
Czy za pomocą IronXL można odczytywać i edytować duże pliki Excel?
Tak, IronXL jest zoptymalizowany pod kątem wydajnej obsługi dużych plików Excel, oferując szybkie przetwarzanie i wysoki poziom wydajności.
Jakie przykłady kodu są dostępne do pracy z IronXL?
IronXL zapewnia obszerną dokumentację i przykłady kodu dla różnych przypadków użycia, w tym tworzenia, odczytu i edycji plików Excel przy użyciu języka C#.
Czy IronXL oferuje jakieś konkretne funkcje, których nie ma w Excel Interop?
IronXL oferuje funkcje, takie jak generowanie plików na podstawie szablonów, zaawansowane formatowanie oraz możliwość pracy z plikami Excel bez konieczności instalowania pakietu Office, które nie są dostępne w Excel Interop.
Jak łatwo jest zintegrować IronXL z istniejącymi projektami C#?
IronXL został zaprojektowany z myślą o łatwej integracji z istniejącymi projektami C# dzięki prostemu API i kompleksowemu wsparciu, co zmniejsza złożoność kodu potrzebnego do zarządzania plikami Excel.
Jakie wsparcie jest dostępne dla programistów korzystających z IronXL?
IronXL oferuje dedykowane wsparcie techniczne, szczegółową dokumentację oraz forum społecznościowe, aby pomóc programistom w szybkim rozwiązywaniu wszelkich napotkanych problemów.



