Jak porównać pliki XLSX w C# przy użyciu strumieni – Kompletny przewodnik
Porównywanie arkuszy Excel ręcznie jest żmudne i podatne na błędy, szczególnie gdy trzeba zweryfikować duże raporty finansowe lub zestawy danych audytowych. W tym samouczku dowiesz się, jak porównać xlsx pliki efektywnie przy użyciu GroupDocs.Comparison for .NET i przetwarzania opartego na strumieniach. Przejdziemy przez każdy krok, wyjaśnimy, dlaczego strumienie mają znaczenie, i podamy praktyczne wskazówki, które możesz skopiować do własnych projektów.
Szybkie odpowiedzi
- Jaką bibliotekę obsługuje porównanie Excel? GroupDocs.Comparison for .NET.
- Czy mogę porównywać pliki bez zapisywania ich na dysku? Tak — użyj strumieni, aby pracować bezpośrednio na danych w pamięci.
- Czy wymagana jest licencja do produkcji? Licencja komercyjna jest obowiązkowa; dostępna jest darmowa wersja próbna.
- Jakie wersje .NET są obsługiwane? .NET Framework 4.5+, .NET Core 3.1+, .NET 5/6/7.
- Ile formatów Excel jest obsługiwanych? Ponad 20, w tym .xls, .xlsx, .xlsm oraz .csv.
Co to jest „how to compare xlsx”?
„How to compare xlsx” odnosi się do programowego wykrywania różnic między dwoma plikami skoroszytów Excel. GroupDocs.Comparison for .NET odczytuje każdy skoroszyt, ocenia zmiany na poziomie komórek i generuje podświetlony dokument wynikowy, który pokazuje wstawienia, usunięcia i modyfikacje. Porównanie podświetla zmienione komórki, wiersze i arkusze, co ułatwia przegląd różnic na pierwszy rzut oka.
Dlaczego używać porównania opartego na strumieniach?
Przetwarzanie strumieniowe zmniejsza obciążenie pamięci, odczytując pliki w fragmentach zamiast ładować cały skoroszyt do RAM. GroupDocs.Comparison może obsługiwać ponad 50 formatów wejściowych i wyjściowych oraz przetwarzać arkusze wielostronicowe przy jednoczesnym utrzymaniu szczytowego zużycia pamięci poniżej 100 MB na typowym sprzęcie serwerowym. Dzięki temu jest idealne dla usług internetowych, mikro‑usług i zadań wsadowych uruchamianych na miejscu.
Wymagania wstępne
- GroupDocs.Comparison for .NET – pobierz ze strony oficjalnej tutaj.
- Środowisko programistyczne C# – Visual Studio 2022 lub dowolne IDE obsługujące .NET 6+.
- Pliki Excel – dwa skoroszyty
.xlsx, które chcesz porównać. - Podstawowa znajomość strumieni – koncepcje
System.IO.Streamsą używane w całym przykładzie.
Importowanie przestrzeni nazw
Poniższe przestrzenie nazw zapewniają dostęp do silnika porównania i narzędzi strumieniowych.
Przestrzeń nazw GroupDocs.Comparison zawiera podstawowe klasy porównania, natomiast System.IO udostępnia typy FileStream i MemoryStream potrzebne do obsługi strumieni.
Przewodnik implementacji krok po kroku
Jak użycie strumieni wpływa na wydajność?
Wczytaj każdy skoroszyt za pomocą File.OpenRead() i przekaż otrzymany strumień bezpośrednio do porównywacza. To podejście eliminuje pliki tymczasowe, skraca czas I/O nawet o 30 % na dyskach SSD i utrzymuje proces w pełni w pamięci, co jest kluczowe dla wysokowydajnych interfejsów API.
Krok 1: Inicjalizacja zmiennych wyjściowych
Zdefiniuj, gdzie zostanie zapisany wynik porównania. Użycie Path.Combine() zapewnia prawidłowy separator katalogów w systemach Windows, Linux i macOS.
Pro Tip: W środowisku produkcyjnym zapisz wynik w folderze tymczasowym lub w koszu pamięci w chmurze, aby utrzymać porządek w katalogu aplikacji.
Krok 2: Utworzenie obiektu Comparer
Klasa Comparer jest centralnym komponentem, który koordynuje porównanie dwóch lub więcej dokumentów.
Utwórz instancję Comparer, otwierając źródłowy skoroszyt za pomocą File.OpenRead(). Instrukcja using zapewnia automatyczne zamknięcie strumienia pliku, zapobiegając wyciekom uchwytów plików.
Krok 3: Dodanie dokumentu docelowego
Dodaj drugi skoroszyt do porównywacza. Możesz łączyć kolejne cele, jeśli potrzebujesz porównać jeden plik główny z kilkoma wariantami — przydatne w raportowaniu regionalnym lub scenariuszach kontroli wersji.
Krok 4: Wykonanie porównania
Wywołaj metodę Compare, aby wygenerować dokument różnicowy. Wynik jest zapisywany do nowego strumienia utworzonego za pomocą File.Create(). Plik wyjściowy podświetla wszystkie zmienione komórki, wiersze i arkusze, co ułatwia wizualną weryfikację.
Metoda Compare wykonuje porównanie i zwraca dokument wynikowy jako strumień.
Krok 5: Wyświetlenie komunikatu sukcesu
Po zakończeniu porównania zaloguj zwięzły komunikat sukcesu zawierający ścieżkę wyjściową. W rzeczywistym API zwróciłbyś strumień wywołującemu lub zapisał go w pamięci chmurowej do późniejszego pobrania.
Typowe problemy i rozwiązywanie
- Błędy „plik w użyciu”: Upewnij się, że żaden inny proces (w tym Excel) nie ma otwartego pliku. Strumienie otwarte za pomocą
File.OpenRead()uzyskują blokadę współdzielenia tylko do odczytu, co łagodzi większość konfliktów. - Wzrost zużycia pamięci przy dużych plikach: Dla skoroszytów przekraczających 100 MB włącz flagę
EnableMemoryOptimizationwComparerOptions(jeśli dostępna) i monitoruj prywatną pamięć procesu. - Porównania mieszanych formatów: GroupDocs.Comparison obsługuje spójne pary formatów; unikaj porównywania pliku
.xlsz.xlsxw tej samej operacji, aby zapobiec niezgodnościom układu. - Pozycjonowanie strumienia: Przy ponownym użyciu strumienia zawsze resetuj go za pomocą
stream.Seek(0, SeekOrigin.Begin)przed przekazaniem do porównywacza.
Solidna obsługa błędów: Przechwytuj ComparisonException dla uszkodzonych skoroszytów i loguj nazwę pliku w celu późniejszego zbadania.ComparisonException jest rzucany przez GroupDocs.Comparison, gdy dokument wejściowy jest uszkodzony lub używa nieobsługiwanego formatu.
Wydajność i najlepsze praktyki
- Szybko zwalniaj strumienie: Otaczaj każdy
FileStreamblokiemusing. - Przetwarzanie wsadowe: Użyj
Parallel.ForEachz asynchronicznymi porównywaczami, aby obsługiwać wiele par plików jednocześnie, ale ogranicz stopień równoległości, aby uniknąć przeciążenia CPU. - Solidna obsługa błędów: Przechwytuj
ComparisonExceptiondla uszkodzonych skoroszytów i loguj nazwę pliku w celu późniejszego zbadania. - Walidacja strumieni wejściowych: Zweryfikuj typ MIME lub nagłówek pliku przed porównaniem, aby odrzucić nie‑Excelowe pliki już na wstępie.
ComparerOptions udostępnia ustawienia konfiguracyjne procesu porównania, takie jak optymalizacja pamięci i kontrola czułości.
Zaawansowane scenariusze użycia
- Porównanie BLOB‑ów z bazy danych: Pobierz BLOB Excela z SQL Server, opakuj go w
MemoryStreami przekaż bezpośrednio do porównywacza — bez plików tymczasowych. - Integracja z pamięcią w chmurze: Użyj Azure Blob Storage SDK, aby uzyskać
BlobStreami przekazać go do porównywacza, umożliwiając w pełni bezserwerowe przepływy pracy. - Endpoint API w czasie rzeczywistym: Udostępnij endpoint POST, który przyjmuje dwa pliki multipart/form‑data, porównuje je w locie i zwraca różnicę jako strumień do pobrania.
Zakończenie
Korzystając z API opartego na strumieniach GroupDocs.Comparison, uzyskasz efektywną pod względem pamięci, bezpieczną i skalowalną metodę porównywania plików XLSX w C#. Ten przewodnik obejmuje wszystko, od konfiguracji po zaawansowane scenariusze w chmurze, dając solidną podstawę do integracji porównywania arkuszy kalkulacyjnych w dowolnym rozwiązaniu .NET.
Najczęściej zadawane pytania
Q: Czy GroupDocs.Comparison for .NET jest kompatybilny ze wszystkimi formatami Excel?
A: Tak, obsługuje ponad 20 formatów powiązanych z Excelem, w tym .xls, .xlsx, .xlsm oraz .csv, zapewniając szeroką kompatybilność zarówno ze starszymi, jak i nowoczesnymi skoroszytami.
Q: Czy mogę dostosować styl wizualny wyniku porównania?
A: Oczywiście. API umożliwia ustawienie kolorów podświetlenia, zmianę stylu obramowania oraz regulację poziomu czułości zmian za pomocą ComparisonOptions.
Q: Czy potrzebna jest licencja komercyjna do użytku produkcyjnego?
A: Wymagana jest ważna licencja GroupDocs.Comparison dla każdej komercyjnej implementacji. Możesz ją uzyskać tutaj.
Q: Czy dostępna jest darmowa wersja próbna?
A: Tak, możesz pobrać w pełni funkcjonalną wersję próbną tutaj, aby ocenić wszystkie funkcje przed zakupem.
Q: Gdzie mogę uzyskać wsparcie społeczności?
A: Forum GroupDocs.Comparison tutaj jest aktywnym miejscem, gdzie można zadawać pytania i dzielić się rozwiązaniami z innymi programistami.
Ostatnia aktualizacja: 2026-06-21
Testowano z: GroupDocs.Comparison 23.10 for .NET
Autor: GroupDocs
using System;
using System.IO;
string outputDirectory = "Your Document Directory";
string outputFileName = Path.Combine(outputDirectory, "result.xlsx");
using (Comparer comparer = new Comparer(File.OpenRead("source.xlsx")))
comparer.Add(File.OpenRead("target.xlsx"));
comparer.Compare(File.Create(outputFileName));
Console.WriteLine($"\nDocuments compared successfully.\nCheck output in {outputDirectory}.");