Przejdź do treści stopki
KORZYSTANIE Z IRONXL

Odczyt pliku Excel przy użyciu Microsoft Office Interop Excel C#: oraz szybszy sposób tworzenia plików Excel bez pakietu Office

Jeśli kiedykolwiek próbowałeś odczytać plik Excel przy użyciu MicrosoftOffice InteropExcel C#, już znasz frustrację: niezgodności wersji, wycieki obiektów COM i twardy wymóg, aby Microsoft Office był zainstalowany na każdym komputerze, który uruchamia twój kod. W tym artykule przeprowadzimy cię przez tradycyjne podejście Interop, wyjaśnimy, gdzie się ono wykrusza, a w końcu pokażemy, jak IronXL pozwala ci tworzyć, odczytywać i zapisywać pliki Excel bez żadnych z tych problemów.

Zacznij z IronXL teraz.
green arrow pointer

Jak biblioteka Interop tworzy skoroszyt Excel?

Przestrzeń nazw Microsoft.Office.Interop.Excel ujawnia ten sam model obiektu COM, który Excel używa wewnętrznie. Aby czytać lub tworzyć pliki Excel za pośrednictwem tej biblioteki interop, najpierw instancjujesz obiekt Application, dodajesz nowy skoroszyt do jego kolekcji Workbooks, a następnie uzyskujesz dostęp do poszczególnych komórek arkusza. Poniższy przykład demonstruje minimalną aplikację konsolową używającą Microsoft.Office.Interop.Excel do tworzenia pliku XLSX i zapisywania wartości do komórek.

using Excel = Microsoft.Office.Interop.Excel;
using System.Runtime.InteropServices;
// Create the Excel Application COM object
Excel.Application excelApp = new Excel.Application();
if (excelApp == null)
{
    Console.WriteLine("Error: Excel is not properly installed.");
    return;
}
// Add a new workbook and access the default worksheet
Excel.Workbook xlWorkBook = excelApp.Workbooks.Add(Type.Missing);
Excel.Worksheet xlWorkSheet = (Excel.Worksheet)xlWorkBook.ActiveSheet;
// Write data into specific cells
xlWorkSheet.Cells[1, 1] = "Product";
xlWorkSheet.Cells[1, 2] = "Price";
xlWorkSheet.Cells[2, 1] = "Widget";
xlWorkSheet.Cells[2, 2] = "29.99";
// Save as an XLSX file and clean up COM objects
string filepath = @"C:\Reports\products.xlsx";
xlWorkBook.SaveAs(filepath);
xlWorkBook.Close(false);
excelApp.Quit();
// Release every COM object to prevent orphaned Excel processes
Marshal.ReleaseComObject(xlWorkSheet);
Marshal.ReleaseComObject(xlWorkBook);
Marshal.ReleaseComObject(excelApp);
using Excel = Microsoft.Office.Interop.Excel;
using System.Runtime.InteropServices;
// Create the Excel Application COM object
Excel.Application excelApp = new Excel.Application();
if (excelApp == null)
{
    Console.WriteLine("Error: Excel is not properly installed.");
    return;
}
// Add a new workbook and access the default worksheet
Excel.Workbook xlWorkBook = excelApp.Workbooks.Add(Type.Missing);
Excel.Worksheet xlWorkSheet = (Excel.Worksheet)xlWorkBook.ActiveSheet;
// Write data into specific cells
xlWorkSheet.Cells[1, 1] = "Product";
xlWorkSheet.Cells[1, 2] = "Price";
xlWorkSheet.Cells[2, 1] = "Widget";
xlWorkSheet.Cells[2, 2] = "29.99";
// Save as an XLSX file and clean up COM objects
string filepath = @"C:\Reports\products.xlsx";
xlWorkBook.SaveAs(filepath);
xlWorkBook.Close(false);
excelApp.Quit();
// Release every COM object to prevent orphaned Excel processes
Marshal.ReleaseComObject(xlWorkSheet);
Marshal.ReleaseComObject(xlWorkBook);
Marshal.ReleaseComObject(excelApp);
Imports Excel = Microsoft.Office.Interop.Excel
Imports System.Runtime.InteropServices

' Create the Excel Application COM object
Dim excelApp As Excel.Application = New Excel.Application()
If excelApp Is Nothing Then
    Console.WriteLine("Error: Excel is not properly installed.")
    Return
End If

' Add a new workbook and access the default worksheet
Dim xlWorkBook As Excel.Workbook = excelApp.Workbooks.Add(Type.Missing)
Dim xlWorkSheet As Excel.Worksheet = CType(xlWorkBook.ActiveSheet, Excel.Worksheet)

' Write data into specific cells
xlWorkSheet.Cells(1, 1) = "Product"
xlWorkSheet.Cells(1, 2) = "Price"
xlWorkSheet.Cells(2, 1) = "Widget"
xlWorkSheet.Cells(2, 2) = "29.99"

' Save as an XLSX file and clean up COM objects
Dim filepath As String = "C:\Reports\products.xlsx"
xlWorkBook.SaveAs(filepath)
xlWorkBook.Close(False)
excelApp.Quit()

' Release every COM object to prevent orphaned Excel processes
Marshal.ReleaseComObject(xlWorkSheet)
Marshal.ReleaseComObject(xlWorkBook)
Marshal.ReleaseComObject(excelApp)
$vbLabelText   $csharpLabel

Powyższy kod tworzy skoroszyt Excel, wypełnia arkusz wartościami wiersza i komórki, zapisuje plik, a następnie ręcznie usuwa każdy obiekt COM. To czyszczenie na końcu nie jest opcjonalne — pomiń to, a znajdziesz nierealne EXCEL.EXE procesy konsumujące pamięć na swoim systemie. Zauważ również, że kod sprawdza, czy obiekt Application jest pusty (null); jeśli Microsoft Office nie jest zainstalowany, każda linia po tej wynikają w błędach. Ta sama wersja biblioteki Office interop musi pasować do wersji Office na maszynie, w przeciwnym razie napotkasz FileNotFoundException i podobne błędy w czasie wykonywania, które są notorycznie trudne do debugowania.

Deweloperzy Visual Basic napotykają te same wyzwania przy używaniu Microsoft.Office.Interop.Excel, ponieważ infrastruktura COM jest identyczna we wszystkich językach .NET.

Jakie problemy powoduje podejście Interop na serwerach i w chmurze?

Microsoft wyraźnie odradza używanieOffice Interopw środowiskach serwerowych. Biblioteka Interop uruchamia pełną instancję aplikacji Excel w tle, co oznacza, że każde żądanie na serwerze internetowym lub aplikacji w chmurze uruchamia ukryty proces pulpitu Windows. Na serwerze Linux w ogóle nie zadziała. Ciągi połączeń do baz danych, ścieżki systemu plików i uprawnienia użytkowników stają się dodatkowymi punktami awarii, gdy Office nie jest zainstalowany lub gdy różne wersje Microsoft Office ze sobą kolidują.

Programiści często publikują o tych problemach na Stack Overflow i Microsoft Q&A, szukając sposobów na odczytywanie plików Excel i tworzenie plików Excel bez zainstalowanego Excela. Poniższa tabela podsumowuje kluczowe różnice.

| Funkcja |Office Interop| IronXL| |---|---|---| |Wymaga zainstalowanego Excela|Tak — tylko na komputerze dewelopera i każdym serwerze produkcyjnym| Nie | |Obsługiwane formaty plików Excel|XLS, XLSX| XLS, XLSX, CSV, TSV, JSON, XML | |Międzysystemowy (.NET Core, Linux, macOS)| Tylko dla systemu Windows |Windows, Linux, macOS, Azure| |Wymagane czyszczenie obiektów COM|Tak — manualne Marshal.ReleaseComObject| Nie | |Wdrażanie serwerów / chmur|Nie zalecane przez Microsoft| W pełni obsługiwane | | Wydajność |Wolniejsze — uruchamia ukryty proces Excela|Lepsza wydajność — zarządzany kod .NET| |.NET Framework & wsparcie .NET Core| Tylko .NET Framework | .NET Framework, .NET Core, .NET 5–10 |

Jak można tworzyć pliki Excel bez zainstalowanego Microsoft Office?

IronXL to biblioteka Excel .NET, która odczytuje, zapisuje i tworzy pliki Excel w całości w zarządzanym kodzie. Nie ma zależności od Microsoft Office, nie ma obiektu COM do zwalniania, i nie ma konfliktów wersji do debugowania. Zainstaluj go za pomocą NuGet w Visual Studio, używając Solution Explorer, wyszukaj IronXL.Excel, i jesteś gotowy. Działa dobrze w .NET Framework 4.6.2+, .NET Core, a także .NET 5 do .NET 10 na wszystkich głównych systemach operacyjnych.

using IronXL;
// Create a new Excel workbook — default value is XLSX format
WorkBook workBook = WorkBook.Create(ExcelFileFormat.XLSX);
// Add a worksheet and populate cells with data
WorkSheet workSheet = workBook.CreateWorkSheet("Sales");
workSheet["A1"].Value = "Product";
workSheet["B1"].Value = "Price";
workSheet["A2"].Value = "Widget";
workSheet["B2"].Value = 29.99;
// Apply basic formatting
workSheet["A1"].Style.Font.Bold = true;
workSheet["B1"].Style.Font.Bold = true;
// Save the XLSX file
workBook.SaveAs(@"C:\Reports\products.xlsx");
using IronXL;
// Create a new Excel workbook — default value is XLSX format
WorkBook workBook = WorkBook.Create(ExcelFileFormat.XLSX);
// Add a worksheet and populate cells with data
WorkSheet workSheet = workBook.CreateWorkSheet("Sales");
workSheet["A1"].Value = "Product";
workSheet["B1"].Value = "Price";
workSheet["A2"].Value = "Widget";
workSheet["B2"].Value = 29.99;
// Apply basic formatting
workSheet["A1"].Style.Font.Bold = true;
workSheet["B1"].Style.Font.Bold = true;
// Save the XLSX file
workBook.SaveAs(@"C:\Reports\products.xlsx");
Imports IronXL

' Create a new Excel workbook — default value is XLSX format
Dim workBook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX)
' Add a worksheet and populate cells with data
Dim workSheet As WorkSheet = workBook.CreateWorkSheet("Sales")
workSheet("A1").Value = "Product"
workSheet("B1").Value = "Price"
workSheet("A2").Value = "Widget"
workSheet("B2").Value = 29.99
' Apply basic formatting
workSheet("A1").Style.Font.Bold = True
workSheet("B1").Style.Font.Bold = True
' Save the XLSX file
workBook.SaveAs("C:\Reports\products.xlsx")
$vbLabelText   $csharpLabel

Plik Excel utworzony za pomocą IronXL

Odczytaj plik Excel przy użyciu bibliotek MicrosoftOffice InteropExcel C#: I szybszy sposób tworzenia plików Excel bez Office: Obraz 1 - plik wyjściowy IronXL

Powyższy kod osiąga ten sam efekt co przykład Interop, ale w połowie linii kodu i bez zewnętrznych zależności. WorkBook.Create() inicjuje nowy skoroszyt w określonym formacie pliku Excel (domyślnie XLSX), a CreateWorkSheet dodaje nazwany arkusz. Wartości komórek są ustawiane przez czystą składnię indeksatorów, a SaveAs automatycznie przetwarza rozszerzenie pliku. Żadnego Quit(), żadnego Marshal.ReleaseComObject, żadnego ukrytego procesu. To samo API obsługuje również zapisywanie jako XLS, CSV, JSON, lub XML jednym wywołaniem metody, zobacz dokumentację eksportu dla wszystkich dostępnych opcji.

IronXL również integruje się czysto z obiektami System.Data, więc dane przepływające z połączenia baz danych przez DataTable mogą być zapisane bezpośrednio na arkuszu bez ręcznej iteracji wiersz po wierszu.

Jak odczytać i zapisać dane arkusza wierszami i komórkami?

Czytanie istniejących plików Excel jest równie proste. Metoda WorkBook.Load akceptuje ścieżkę do dowolnego plikuXLS, XLSXlub CSV. Następnie każdy arkusz udostępnia swoje wiersze i komórki jako kolekcje iterowane, co pozwala łatwo odczytywać dane, modyfikować wartości lub przesyłać wyniki do bazy danych lub punktu końcowego serwera.

using IronXL;
// Load an existing Excel file
WorkBook workBook = WorkBook.Load(@"C:\Reports\products.xlsx");
WorkSheet workSheet = workBook.DefaultWorkSheet;
// Read and display each row of data
foreach (var row in workSheet.Rows)
{
    foreach (var cell in row.ToArray())
    {
        Console.Write(cell.Value + "\t");
    }
    Console.WriteLine();
}
// Update a specific cell and save
workSheet["B2"].Value = 34.99;
workBook.SaveAs(@"C:\Reports\products_updated.xlsx");
using IronXL;
// Load an existing Excel file
WorkBook workBook = WorkBook.Load(@"C:\Reports\products.xlsx");
WorkSheet workSheet = workBook.DefaultWorkSheet;
// Read and display each row of data
foreach (var row in workSheet.Rows)
{
    foreach (var cell in row.ToArray())
    {
        Console.Write(cell.Value + "\t");
    }
    Console.WriteLine();
}
// Update a specific cell and save
workSheet["B2"].Value = 34.99;
workBook.SaveAs(@"C:\Reports\products_updated.xlsx");
Imports IronXL

' Load an existing Excel file
Dim workBook As WorkBook = WorkBook.Load("C:\Reports\products.xlsx")
Dim workSheet As WorkSheet = workBook.DefaultWorkSheet

' Read and display each row of data
For Each row In workSheet.Rows
    For Each cell In row.ToArray()
        Console.Write(cell.Value & vbTab)
    Next
    Console.WriteLine()
Next

' Update a specific cell and save
workSheet("B2").Value = 34.99
workBook.SaveAs("C:\Reports\products_updated.xlsx")
$vbLabelText   $csharpLabel

Odczyt pliku Excel z IronXL

Odczytaj plik Excel przy użyciu bibliotek MicrosoftOffice InteropExcel C#: I szybszy sposób tworzenia plików Excel bez Office: Obraz 2 - odczytaj plik Excel z IronXL

Ten przykład pokazuje, jak odczytać pliki Excel przez iterację po kolekcji Rows i dostęp do właściwości Value każdej komórki. Wzorzec zagnieżdżonej pętli — var row a następnie var cell — odzwierciedla naturalne myślenie o arkuszu kalkulacyjnym. Po odczytaniu danych kod aktualizuje pojedynczą komórkę i zapisuje skoroszyt do nowego pliku XLSX, zachowując oryginał. IronXL automatycznie przelicza jakiekolwiek formuły Excel po modyfikacji arkusza, co jest funkcją oferowaną także przez bibliotekę interop, ale kosztem uruchamiania pełnej instancji Excel.

Dla bardziej zaawansowanych scenariuszy, takich jak formuły, formatowanie warunkowe, scalanie komórek lub praca z wieloma arkuszami, dokumentacja API IronXL obejmuje wszystkie dostępne metody i właściwości. Biblioteka obsługuje także dostęp z kontrolerów ASP.NET, umożliwiając łatwe generowanie i pobieranie plików Excel z aplikacji webowej lub punktu końcowego API bez potrzeby instalowania Office na serwerze.

Jaka jest najlepsza droga do automatyzacji Excel w .NET?

Jeśli projekt jest ograniczony do starszego środowiska Windows desktop, w którym Microsoft Office jest już zainstalowany i ta sama wersja pozostanie stabilna, biblioteka interop może działać dobrze dla podstawowych zadań. Ale dla wszystkiego innego, wdrożenia serwerowe, aplikacje w chmurze, kompilacje międzyplatformowe lub jakiegokolwiek scenariusza, w którym chcesz lepszą wydajność i mniej błędów w czasie pracy, niezależna biblioteka .NET Excel jest jednoznacznie najlepszym wyborem.

IronXL obsługuje każdą powszechną operację Excel (tworzenie skoroszytów, czytanie danych arkusza Excel, zapis do komórek, zapisywanie w wielu typach rozszerzeń plików w tym XLS i XLSX) przez czyste, nowoczesne API, które działa wszędzie tam, gdzie działa .NET. Obsługuje zarówno projekty C#, jak i Visual Basic, a ten sam kod działa na Windows, Linux i macOS bez modyfikacji.

Rozpocznij bezpłatną 30-dniową próbę, aby przetestować go w swoim projekcie, lub poznaj opcje licencjonowania, gdy jesteś gotowy do wdrożenia.

Często Zadawane Pytania

Jakie są ograniczenia korzystania z Microsoft Office Interop Excel w języku C#?

Korzystanie z Microsoft Office Interop Excel w języku C# może prowadzić do problemów, takich jak niezgodności wersji, wycieki obiektów COM oraz konieczność zainstalowania pakietu Microsoft Office na każdym komputerze, na którym uruchamiany jest kod.

W jaki sposób IronXL usprawnia proces obsługi plików Excel w języku C#?

IronXL pozwala tworzyć, odczytywać i zapisywać pliki Excel bez konieczności korzystania z pakietu Microsoft Office, eliminując problemy takie jak niezgodności wersji i wycieki obiektów COM.

Czy IronXL może być używany na serwerze bez zainstalowanego pakietu Microsoft Office?

Tak, IronXL jest bezpieczny dla serwerów i nie wymaga instalacji pakietu Microsoft Office, co czyni go rozwiązaniem wielopłatformowym do obsługi plików Excel.

Jakie są zalety korzystania z IronXL w porównaniu z Excel Interop?

IronXL zapewnia bardziej niezawodny i wydajny sposób obsługi plików Excel, ponieważ nie opiera się na pakiecie Microsoft Office, co zmniejsza ryzyko typowych problemów, takich jak niezgodności wersji i wycieki obiektów COM.

Czy IronXL jest kompatybilny ze wszystkimi wersjami plików Excel?

IronXL obsługuje szeroki zakres formatów plików Excel, w tym XLSX, XLS, CSV i TSV, dzięki czemu jest wszechstronnym narzędziem do różnych operacji na plikach Excel.

Czy IronXL wymaga jakiejś specjalnej konfiguracji, aby działać na komputerze?

IronXL nie wymaga instalacji pakietu Microsoft Office i można go łatwo zintegrować z projektami C# bez specjalnej konfiguracji.

Czy IronXL może efektywnie obsługiwać duże pliki Excel?

Tak, IronXL został zaprojektowany do wydajnego odczytu i zapisu dużych plików Excel, zapewniając wysoką wydajność bez ograniczeń Interop.

Jakie platformy obsługuje IronXL?

IronXL jest wielopłatformowy i obsługuje systemy Windows, Linux oraz MacOS, co sprawia, że jest elastycznym wyborem do pracy z plikami Excel w różnych środowiskach.

W jaki sposób IronXL obsługuje tworzenie plików Excel?

IronXL zapewnia proste API do programowego tworzenia plików Excel w języku C#, oferując funkcje formatowania komórek, zarządzania arkuszami i wiele innych.

Czy istnieje społeczność lub wsparcie dla użytkowników IronXL?

Tak, użytkownicy IronXL mają dostęp do dokumentacji, samouczków i wsparcia społeczności, które pomogą im w przypadku wszelkich pytań dotyczących integracji lub użytkowania.

Curtis Chau
Autor tekstów technicznych

Curtis Chau posiada tytuł licencjata z informatyki (Uniwersytet Carleton) i specjalizuje się w front-endowym rozwoju, z ekspertką w Node.js, TypeScript, JavaScript i React. Pasjonuje się tworzeniem intuicyjnych i estetycznie przyjemnych interfejsów użytkownika, Curtis cieszy się pracą z nowoczesnymi frameworkami i tworzeniem dobrze zorganizowanych, atrakcyjnych wizualnie podrę...

Czytaj więcej

Zespół wsparcia Iron

Jesteśmy online 24 godziny, 5 dni w tygodniu.
Czat
E-mail
Zadzwoń do mnie