Porównywanie dokumentów C# – Porównywanie wielu dokumentów Word programowo

Czy kiedykolwiek ręcznie porównywałeś dokumenty Word linia po linii, starając się wychwycić każdą zmianę? Nie jesteś sam. W tym przewodniku nauczysz się, jak efektywnie porównywać wiele dokumentów Word, niezależnie od tego, czy przeglądasz umowy prawne, śledzisz wersje, czy zarządzasz projektami współdzielonej edycji. Automatyzacja procesu za pomocą GroupDocs.Comparison dla .NET oszczędza czas, zmniejsza liczbę błędów i generuje profesjonalne raporty porównawcze w zaledwie kilku linijkach kodu C#.

Czego nauczysz się w tym samouczku:

  • Jak porównywać dokumenty Word przy użyciu strumieni (idealne dla plików przechowywanych w bazie danych)
  • Konfigurowanie GroupDocs.Comparison w projekcie C# od podstaw
  • Dostosowywanie wyników porównania przy użyciu profesjonalnego stylu
  • Efektywne obsługiwanie porównań wielu dokumentów
  • Rozwiązywanie typowych problemów i optymalizacja wydajności
  • Praktyczne zastosowania, które zaoszczędzą godziny ręcznej pracy

Szybkie odpowiedzi

  • Jakiej biblioteki powinienem używać? GroupDocs.Comparison for .NET
  • Czy mogę porównać wiele dokumentów Word jednocześnie? Tak – dodaj dowolną liczbę docelowych strumieni.
  • Jak podświetlić różnice w Wordzie? Użyj CompareOptions z własnym StyleSettings.
  • Czy potrzebuję licencji do rozwoju? Bezpłatna wersja próbna wystarczy do nauki; tymczasowa licencja usuwa znaki wodne.
  • Czy dostępne jest wsparcie async? Tak – możesz opakować porównanie w Task.Run, aby wywołania nie blokowały.

Dlaczego porównywać wiele dokumentów Word?

Porównywanie więcej niż dwóch wersji jednocześnie daje jedną, spójną wizję wszystkich zmian. Jest to szczególnie cenne, gdy wielu recenzentów edytuje ten sam kontrakt lub gdy trzeba audytować kilka wersji propozycji. Zamiast żonglować oddzielnymi raportami porównawczymi, GroupDocs.Comparison łączy wszystkie różnice w jednym dokumencie, co ułatwia wykrywanie dodatków, usunięć i modyfikacji.

Jak podświetlić różnice w dokumentach Word

GroupDocs.Comparison pozwala zdefiniować własny styl dla wstawionego, usuniętego lub zmienionego tekstu. Ustawiając InsertedItemStyle, DeletedItemStyle i ModifiedItemStyle, możesz dopasować raport do identyfikacji wizualnej swojej organizacji lub po prostu poprawić czytelność. Przeprowadzimy prosty przykład, który podświetla wstawiony tekst na żółto.

Wymagania wstępne

  • Biblioteka GroupDocs.Comparison (v25.4.0 lub nowsza) – działa z .NET Framework 4.6.1+ oraz .NET Core 2.0+
  • Visual Studio (dowolna aktualna wersja)
  • Podstawowa znajomość C# – powinieneś swobodnie tworzyć aplikację konsolową
  • Kilka przykładowych plików Word do przetestowania porównania

Uruchamianie GroupDocs.Comparison

Instalacja biblioteki (łatwy sposób)

Opcja 1: Konsola Menedżera Pakietów

Install-Package GroupDocs.Comparison -Version 25.4.0

Opcja 2: .NET CLI (moje ulubione)

dotnet add package GroupDocs.Comparison --version 25.4.0

Licencjonowanie w prosty sposób

  • Bezpłatna wersja próbna: Pełna funkcjonalność z drobnymi znakami wodnymi – idealna do nauki.
  • Licencja tymczasowa: Usuwa znaki wodne w demonstracjach; poproś o darmowy tymczasowy klucz od GroupDocs.
  • Licencja produkcyjna: Kup pełną licencję na Zakup GroupDocs.

Twoje pierwsze porównanie (styl Hello World)

using System;
using GroupDocs.Comparison;

namespace DocumentComparisonApp
{
    class Program
    {
        static void Main(string[] args)
        {
            // Initialize comparer with a source document stream
            using (Comparer comparer = new Comparer(File.OpenRead("SOURCE_WORD.docx")))
            {
                // Add target documents to compare
                comparer.Add("TARGET_WORD.docx");
                Console.WriteLine("Documents added for comparison.");
            }
        }
    }
}

Ten fragment kodu tworzy obiekt Comparer, ładuje dokument źródłowy i dodaje pojedynczy dokument docelowy. Traktuj to jako przygotowanie porównania „przed i po”.

Pełna implementacja – krok po kroku

Krok 1: Przygotowanie podstaw

string documentDirectory = "YOUR_DOCUMENT_DIRECTORY";
using (Comparer comparer = new Comparer(File.OpenRead(System.IO.Path.Combine(documentDirectory, "SOURCE_WORD.docx"))))
{
    // We'll build on this foundation
}

Co się dzieje? Tworzymy instancję Comparer przy użyciu strumienia zamiast ścieżki do pliku, co daje nam elastyczność pracy z dokumentami przechowywanymi w bazach danych lub otrzymanymi przez sieć.

Krok 2: Dodawanie wielu dokumentów docelowych

comparer.Add(File.OpenRead(System.IO.Path.Combine(documentDirectory, "TARGET_WORD.docx")));
comparer.Add(File.OpenRead(System.IO.Path.Combine(documentDirectory, "TARGET2_WORD.docx")));
comparer.Add(File.OpenRead(System.IO.Path.Combine(documentDirectory, "TARGET3_WORD.docx")));

Teraz możesz porównać wiele dokumentów Word w jednym uruchomieniu. GroupDocs.Comparison inteligentnie łączy wszystkie różnice w jeden plik wynikowy.

Krok 3: Wyróżnianie różnic (niestandardowy styl)

CompareOptions compareOptions = new CompareOptions()
{
    InsertedItemStyle = new StyleSettings()
    {
        FontColor = System.Drawing.Color.Yellow  // Highlight inserted text in yellow
    }
};

Niestandardowy styl podświetla różnice w Wordzie i ułatwia czytanie raportu interesariuszom.

Krok 4: Wykonywanie porównania i zapisywanie wyników

string outputDirectory = "YOUR_OUTPUT_DIRECTORY";
string outputFileName = System.IO.Path.Combine(outputDirectory, "RESULT_WORD.docx");
comparer.Compare(File.Create(outputFileName), compareOptions);

Powyższa pojedyncza linijka wykonuje porównanie wszystkich celów i zapisuje sformatowany dokument wynikowy. Ponieważ używamy File.Create(), możesz zamienić strumień na docelowe miejsce w bazie danych lub w chmurze.

Typowe problemy i ich rozwiązania

Problem: Błędy „File Not Found”

string sourcePath = System.IO.Path.Combine(documentDirectory, "SOURCE_WORD.docx");
if (!File.Exists(sourcePath))
{
    throw new FileNotFoundException($"Source document not found: {sourcePath}");
}

Zawsze weryfikuj ścieżki przed otwieraniem strumieni.

Problem: Problemy z pamięcią przy dużych dokumentach

// Don't do this - keeps all streams in memory
// comparer.Add(File.OpenRead(doc1));
// comparer.Add(File.OpenRead(doc2));

// Do this instead - process one at a time
using (var stream1 = File.OpenRead(doc1))
{
    comparer.Add(stream1);
    // Stream is disposed automatically here
}

Niezwłocznie zwalniaj strumienie, aby utrzymać niskie zużycie pamięci.

Problem: Nieoczekiwane wyniki porównania

CompareOptions options = new CompareOptions()
{
    CompareBookmarks = false,  // Ignore bookmark differences
    CompareComments = false,   // Ignore comment differences
    CompareFields = false      // Ignore field differences
};

Dostosuj ustawienia czułości, aby ignorować elementy nieistotne dla Twojej recenzji.

Asynchroniczne porównanie dla aplikacji webowych

public async Task<string> CompareDocumentsAsync(Stream source, Stream[] targets)
{
    using (var comparer = new Comparer(source))
    {
        foreach (var target in targets)
        {
            comparer.Add(target);
        }
        
        // Perform comparison on background thread
        return await Task.Run(() => 
        {
            var output = new MemoryStream();
            comparer.Compare(output, compareOptions);
            return Convert.ToBase64String(output.ToArray());
        });
    }
}

Opakuj porównanie w Task.Run, aby wątki UI pozostały responsywne.

Wskazówki dotyczące optymalizacji wydajności

  • Zawsze zwalniaj strumienie (using statements).
  • Przetwarzaj dokumenty kolejno gdy to możliwe.
  • Rozważ wzorce async dla API webowych.
  • Skaluj przy użyciu kolejek w scenariuszach o dużej objętości.
  • Utrzymuj bibliotekę w najnowszej wersji, aby korzystać z ulepszeń wydajności.

Najczęściej zadawane pytania

P: Jak GroupDocs.Comparison obsługuje różne formaty dokumentów?
O: Obsługuje Word, PDF, Excel, PowerPoint i wiele innych. API pozostaje spójne we wszystkich formatach, więc ten sam kod działa dla PDF‑ów, DOCX itp.

P: Czy mogę porównywać dokumenty o różnych układach lub strukturach?
O: Tak. Silnik porównuje treść semantycznie, nie tylko znak po znaku, więc zmiany strukturalne są obsługiwane płynnie.

P: Co zrobić, jeśli dokumenty są chronione hasłem?
O: Możesz podać hasło przy otwieraniu strumienia; biblioteka odszyfruje plik do porównania.

P: Czy istnieje limit liczby dokumentów, które można porównać jednocześnie?
O: Praktycznym limitem jest pamięć systemowa. Na typowej maszynie deweloperskiej porównanie 5‑10 dużych dokumentów działa dobrze.

P: Jak zintegrować to z pipeline CI/CD?
O: Opakuj logikę porównania w aplikacji konsolowej lub API webowym, a następnie wywołuj ją z skryptów budowania, aby automatycznie wykrywać zmiany w dokumentacji.

P: Czy biblioteka obsługuje dokumenty wielojęzyczne?
O: Zdecydowanie tak. Obsługuje języki pisane od prawej do lewej, takie jak arabski i hebrajski, oraz znaki Unicode.

Dodatkowe zasoby do pogłębionej nauki

  • Dokumentacja – Kompleksowa referencja API i zaawansowane samouczki
  • Referencja API – Szczegółowa dokumentacja metod i właściwości
  • Centrum pobierania – Najnowsze wersje i dzienniki zmian
  • Forum społeczności – Połącz się z innymi programistami i uzyskaj pomoc od ekspertów GroupDocs

Ostatnia aktualizacja: 2026-04-14
Testowano z: GroupDocs.Comparison 25.4.0 for .NET
Autor: GroupDocs