Jak tworzyć pliki Excel w języku C#: Interop a IronXL
Wprowadzenie
Programowe tworzenie plików Excel jest podstawowym wymogiem w wielu aplikacjach napisanych w języku C#. Podczas gdy Microsoft.Office.Interop. Tradycyjnym podejściem do tworzenia plików Excel w języku C# przy użyciu Interop był Excel. Wiąże się to jednak z pewnymi ograniczeniami, takimi jak konieczność zainstalowania programu Microsoft Excel oraz zależność od bibliotek Primary Interop Assemblies. Niewoczesne alternatywy dla bibliotek Excel, takie jak biblioteka IronXL, pozwalają tworzyć skoroszyty Excel, pracować z wieloma arkuszami oraz generować pliki XLSX lub CSV bez 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 |
Nie |
Nie |
Nie |
Nie |
Nie |
Nie |
|
Wdrożenie na serwerze |
Niezalecane |
Tak |
Tak |
Tak |
Tak |
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 |
Nie |
Nie |
Tak |
Tak |
Tak |
|
Obsługa formatu XLSX |
Tak |
Tak |
Tak |
Tak |
Tak |
Tak |
Tak |
|
Krzywa uczenia się |
Steep |
Łatwe |
Łatwe |
Łatwe |
Umiarkowany |
Łatwe |
Umiarkowany |
|
Licencja komercyjna |
Licencja Office |
Od $liteLicense |
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.
Niewoczesne 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.
!{--01001100010010010100001001010010010000010101001001011001010111110100011101000101010101000101111101010011010101000100000101010010010101000100010101000100010111110101011101001001010100010010000101111101010000010100100100111101000100010101010100001101010100010111110101010001010010010010010100000101001100010111110100001001001100010011110100001101001011--}
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.SetNienCommercialPersonal("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.SetNienCommercialPersonal("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.SetNienCommercialPersonal("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 umożliwia programowe tworzenie arkuszy i skoroszytów Excel, obsługując wiele formatów plików, w tym CSV, XLSX i XLS. Jednak dziedzictwo Javy sprawia, że API jest mniej intuicyjne w porównaniu z innymi bibliotekami C# dla Excela.
Kluczowe czynniki decyzyjne
Kiedy wybrać IronXL
IronXL doskonale sprawdza się w aplikacjach korporacyjnych wymagających obsługi biblioteki IronXL na wielu platformach, kompleksowych funkcji programu Excel oraz profesjonalnego wsparcia. Jego intuicyjny interfejs API skraca czas programowania, gdy trzeba tworzyć pliki Excel bez zainstalowanego pakietu Office, a solidna wydajność pozwala sprawnie obsługiwać duże zbiory danych. Wbudowany silnik formuł i obsługa wielu formatów (XLS, XLSX, CSV, TSV) sprawiają, że jest on wszechstronny i spełnia różne wymagania biznesowe.
Alternatywne rozwiązania
EPPlus sprawdza się dobrze w projektach, w których już używana jest wersja 4.5.3 lub wcześniejsza (ostatnia darmowa wersja) lub w tych, w których istnieją już komercyjne licencje EPPlus. ClosedXML Suite nadaje się do projektów open source, które mają podstawowe potrzeby w zakresie arkuszy kalkulacyjnych i nie wymagają tworzenia wykresów. NPOI pozostaje aktualne, gdy obsługa formatu XLS ma kluczowe znaczenie, a koszty licencji muszą być zminimalizowane.
Dla porównania z innymi opcjami komercyjnymi: GemBox.Spreadsheet oferuje podobne funkcje do IronXL w konkurencyjnej cenie, podczas gdy Aspose.Cells zapewnia rozbudowaną funkcjonalność w wyższej cenie. Jednak połączenie funkcji, wydajności i wsparcia technicznego oferowane przez IronXL często zapewnia najlepszą wartość dla projektów .NET związanych z obróbką danych w Excelu.
Migracja z Interop do IronXL
Migracja z Excel Interop do IronXL przebiega według prostego schematu. Szczegółowe wskazówki można znaleźć w dokumentacji IronXL oraz w przykładach kodu:
- Usuń odniesienia do COM — zastąp odniesienia do Microsoft.Office.Interop.Excel odniesieniami do IronXl.Excel
- Uprość tworzenie obiektów — zastąp hierarchię Application/Workbook/Worksheet bezpośrednim tworzeniem WorkBook
- Aktualizacja dostępu do komórek — zamiana notacji Cells[row, col] na worksheet["A1"]
- Usuń kod porządkujący — wyeliminuj wywołania Marshal.ReleaseComObject
- Testowanie międzyplatformowe — sprawdź działanie na docelowych platformach wdrożeniowych
W przypadku złożonych migracji obejmujących wykresy Excel lub formatowanie warunkówe, IronXL zapewnia kompleksowe wsparcie.
Zrozumienie ograniczeń
Należy pamiętać, że biblioteki Primary Interop Assemblies (PIA) nie mogą działać bez zainstalowanego programu Excel — są one jedynie interfejsami do obiektów COM, które wymagają rzeczywistej aplikacji pakietu Office. To błędne przekonanie często prowadzi do niepowodzeń we wdrażaniu podczas przenoszenia aplikacji na serwery lub prób automatyzacji programu Excel bez zainstalowanego pakietu Office.
Jeśli chodzi o bezpieczeństwo, IronXL przechodzi regularne audyty bezpieczeństwa i posiada certyfikat DigiCert, zapewniając ochronę na poziomie korporacyjnym bez luk związanych z interfejsami COM. Szczegółowe informacje dotyczące bezpieczeństwa można znaleźć w dokumentacji bezpieczeństwa IronXL.
Wnioski
Chociaż Excel Interop spełniał swoje zadanie w aplikacjach desktopowych, współczesne programowanie wymaga bardziej elastycznych alternatyw dla biblioteki Excel. IronXL stanowi najbardziej kompleksową alternatywę dla tworzenia plików Excel bez Interop, łącząc łatwość obsługi z funkcjami klasy Enterprise oraz obsługą Excel na wielu platformach.
Niezależnie od tego, czy tworzysz aplikacje w chmurze, pracujesz z kontenerami Docker, czy opracowujesz rozwiązania wielopłatformowe, wybór biblioteki, która nie wymaga instalacji programu Excel, ma kluczowe znaczenie dla tworzenia skalowalnych i łatwych w utrzymaniu aplikacji. Pobierz IronXL, aby już dziś zoptymalizować proces automatyzacji pracy w Excelu.
Często Zadawane Pytania
Jakie są ograniczenia korzystania z Excel Interop w języku C#?
Współpraca z programem Excel w języku C# może być ograniczona ze względu na zależność od instalacji programu Microsoft Excel, potencjalne problemy z wydajnością oraz brak obsługi wielu platform. IronXL oferuje bardziej wydajną i wszechstronną alternatywę do pracy z arkuszami kalkulacyjnymi.
Dlaczego warto rozważyć użycie IronXL zamiast Excel Interop?
IronXL zapewnia bardziej niezawodne rozwiązanie dzięki swojej wieloplatformowości, większej wydajności i zmniejszonemu zużyciu pamięci. Nie wymaga instalacji programu Excel na serwerze, co sprawia, że lepiej nadaje się do aplikacji po stronie serwera.
Czy IronXL może efektywnie obsługiwać duże zbiory danych?
Tak, IronXL jest zoptymalizowany pod kątem wydajnej obsługi dużych zbiorów danych. Zapewnia lepszą wydajność i zarządzanie pamięcią w porównaniu z Excel Interop, dzięki czemu idealnie nadaje się do przetwarzania obszernych danych.
Czy IronXL jest kompatybilny z .NET Core?
IronXL jest w pełni kompatybilny z .NET Core, co pozwala programistom tworzyć aplikacje działające na różnych platformach bez konieczności instalowania programu Microsoft Excel.
Jakie są opcje licencyjne dla IronXL?
IronXL oferuje elastyczne opcje licencyjne, w tym licencje dla pojedynczego programisty, zespołu i Licencji Enterprise, dzięki czemu nadaje się do projektów o różnej wielkości i budżecie.
Czy IronXL obsługuje eksport danych do formatów Excel?
IronXL obsługuje eksport danych do wielu formatów Excel, takich jak XLS, XLSX i CSV, zapewniając elastyczność w zakresie różnych potrzeb związanych z przetwarzaniem i prezentacją danych.
Czy mogę używać IronXL do automatycznego generowania raportów w Excelu?
Tak, IronXL został zaprojektowany w celu ułatwienia automatycznego generowania raportów w Excelu, oferując funkcje takie jak filtrowanie danych, tworzenie wykresów i przetwarzanie formuł w celu usprawnienia zadań związanych z raportowaniem.
W jaki sposób IronXL zapewnia dokładność danych podczas operacji w programie Excel?
IronXL zapewnia dokładność danych dzięki niezawodnemu przetwarzaniu formuł i możliwościom formatowania komórek, minimalizując błędy i zachowując integralność danych podczas operacji w programie Excel.
Jakie języki programowania obsługuje IronXL?
IronXL jest przeznaczony przede wszystkim do użytku z językiem C#, ale obsługuje również inne języki .NET, co czyni go wszechstronnym narzędziem dla programistów pracujących w ekosystemie .NET.
Czy IronXL oferuje obsługę klienta?
IronXL zapewnia kompleksową obsługę klienta, w tym dokumentację, samouczki i bezpośrednią pomoc, dzięki czemu programiści mogą efektywnie wykorzystywać bibliotekę IronXL w swoich projektach.




