Porównywanie dokumentów C# – porównywanie wielu dokumentów Word programowo
Jeśli potrzebujesz porównać wiele dokumentów Word szybko i dokładnie, ten tutorial pokazuje dokładnie, jak to zrobić przy użyciu GroupDocs.Comparison dla .NET. Niezależnie od tego, czy przeglądasz umowy, śledzisz zmiany, czy konsolidujesz wersje od kilku autorów, automatyzacja porównania eliminuje ręczne sprawdzanie wiersz po wierszu, zmniejsza liczbę błędów ludzkich i generuje jeden dopracowany raport, który podświetla każde wstawienie, usunięcie i modyfikację.
W tym przewodniku opanujesz:
- Ładowanie plików Word ze strumieni (idealne dla plików przechowywanych w bazie danych lub w chmurze)
- Konfigurację GroupDocs.Comparison w nowym projekcie C#
- Dostosowywanie stylu wizualnego wstawionego, usuniętego i zmienionego tekstu
- Porównywanie dowolnej liczby dokumentów docelowych w jednym przebiegu
- Rozwiązywanie typowych problemów i optymalizacja wydajności dla dużych plików
- Scenariusze z życia wzięte, w których automatyczne porównanie oszczędza 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 tyle strumieni docelowych, ile potrzebujesz.
- Jak podświetlić różnice w Wordzie? Skonfiguruj
CompareOptionsz własnymStyleSettings. - Czy potrzebuję licencji do rozwoju? Darmowa wersja próbna wystarczy do nauki; tymczasowa licencja usuwa znaki wodne.
- Czy dostępne jest wsparcie async? Tak – otocz wywołanie porównania w
Task.Run, aby nie blokować.
Dlaczego porównywać wiele dokumentów Word?
Możesz uzyskać jednolity widok wszystkich zmian we wszystkich wersjach zamiast żonglowania oddzielnymi raportami obok siebie. Jest to kluczowe, gdy wielu recenzentów edytuje ten sam kontrakt, gdy musisz audytować kilka wersji propozycji lub gdy chcesz wygenerować dokument główny, który rejestruje każdą poprawkę. Łącząc różnice w jednym pliku wyjściowym, interesariusze od razu widzą, co zostało dodane, usunięte lub zmienione, bez otwierania wielu plików.
Jak podświetlić różnice w dokumentach Word
Załaduj plik źródłowy, dodaj każdy dokument docelowy, a następnie zastosuj CompareOptions, które określają InsertedItemStyle, DeletedItemStyle i ModifiedItemStyle. Wynikiem jest plik Word, w którym wstawienia są żółte, usunięcia czerwone z przekreśleniem, a modyfikacje niebieskie podkreślone, zgodnie z wytycznymi brandingowymi Twojej organizacji.
Bezpośrednia odpowiedź
GroupDocs.Comparison pozwala ustawić style wizualne za pomocą CompareOptions — definiujesz kolory, czcionki i typy podświetleń dla wstawionego, usuniętego i zmodyfikowanego tekstu, a silnik renderuje te style bezpośrednio w wyjściowym dokumencie Word. Ten jednorazowy krok konfiguracyjny sprawia, że różnice są jednoznacznie widoczne dla recenzentów.
Wymagania wstępne
- Biblioteka GroupDocs.Comparison (v25.4.0 lub nowsza) – kompatybilna z .NET Framework 4.6.1+, .NET Core 2.0+, .NET 5/6/7.
- Visual Studio (dowolna aktualna edycja) lub podobne IDE C#.
- Podstawowa znajomość aplikacji konsolowych C#.
- Jedno lub więcej przykładowych plików
.docxdo eksperymentów.
Uruchamianie GroupDocs.Comparison
Instalacja biblioteki (łatwy sposób)
Opcja 1: Package Manager Console
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 małym znakiem wodnym — idealna do nauki.
- Tymczasowa licencja: Usuwa znaki wodne w wersjach demonstracyjnych; poproś o darmowy klucz od GroupDocs.
- Licencja produkcyjna: Kup pełną licencję na GroupDocs Purchase.
Twoje pierwsze porównanie (styl hello‑world)
Comparer jest klasą centralną w GroupDocs.Comparison, która koordynuje ładowanie dokumentów, porównanie i generowanie wyników.
Ten fragment kodu tworzy obiekt Comparer, ładuje dokument źródłowy i dodaje pojedynczy dokument docelowy. To jak ustawienie porównania „przed i po”.
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.");
}
}
}
}
Pełna implementacja – krok po kroku
Krok 1: przygotowanie fundamentu
Comparer jest tworzony przy użyciu strumienia zamiast ścieżki pliku, co daje elastyczność pracy z dokumentami przechowywanymi w bazach danych lub odbieranymi przez sieć.
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
}
Krok 2: dodawanie wielu dokumentów docelowych
Teraz możesz porównać wiele dokumentów Word w jednym uruchomieniu. GroupDocs.Comparison inteligentnie łączy wszystkie różnice w jednym pliku wynikowym.
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")));
Krok 3: wyróżnianie różnic (niestandardowy styl)
CompareOptions pozwala określić zachowanie porównania oraz styl wizualny dla wstawionego, usuniętego i zmodyfikowanego contentu.StyleSettings definiuje wygląd (kolor, czcionka, podświetlenie) stosowany do różnic w dokumencie wyjściowym.
CompareOptions compareOptions = new CompareOptions()
{
InsertedItemStyle = new StyleSettings()
{
FontColor = System.Drawing.Color.Yellow // Highlight inserted text in yellow
}
};
Krok 4: wykonanie porównania i zapis wyników
Poniższa pojedyncza linia wykonuje porównanie wszystkich docelowych dokumentów i zapisuje dopracowany dokument wynikowy. Ponieważ używamy File.Create(), możesz zamienić strumień na docelowe miejsce w bazie danych lub w chmurze.
string outputDirectory = "YOUR_OUTPUT_DIRECTORY";
string outputFileName = System.IO.Path.Combine(outputDirectory, "RESULT_WORD.docx");
comparer.Compare(File.Create(outputFileName), compareOptions);
Typowe problemy i ich rozwiązania
Problem: błąd „File not found”
Zawsze sprawdzaj, czy ścieżki plików przekazywane do File.OpenRead (lub ich odpowiedniki) rzeczywiście istnieją i są dostępne dla uruchamianego procesu.
string sourcePath = System.IO.Path.Combine(documentDirectory, "SOURCE_WORD.docx");
if (!File.Exists(sourcePath))
{
throw new FileNotFoundException($"Source document not found: {sourcePath}");
}
Problem: problemy z pamięcią przy dużych dokumentach
Zwalniaj strumienie niezwłocznie przy użyciu instrukcji using. GroupDocs.Comparison przetwarza dokumenty w fragmentach, więc niepotrzebne utrzymywanie otwartych strumieni może zwiększyć zużycie pamięci.
// 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
}
Problem: nieoczekiwane wyniki porównania
Dostosuj ustawienia czułości w CompareOptions, aby ignorować elementy takie jak zmiany nagłówka/stopki, numery stron czy metadane, które nie są istotne dla Twojej recenzji.
CompareOptions options = new CompareOptions()
{
CompareBookmarks = false, // Ignore bookmark differences
CompareComments = false, // Ignore comment differences
CompareFields = false // Ignore field differences
};
Asynchroniczne porównanie dla aplikacji webowych
Otocz wywołanie porównania w Task.Run, aby wątki UI pozostały responsywne i aby nie blokować potoków żądań ASP.NET.
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());
});
}
}
Wskazówki dotyczące optymalizacji wydajności
- Zwalniaj strumienie natychmiast po użyciu (bloki
using). - Przetwarzaj dokumenty kolejno gdy to możliwe; przetwarzanie równoległe może zwiększyć obciążenie pamięci.
- Wykorzystuj wzorce async w API webowych, aby zwiększyć skalowalność.
- Kolejkuj duże partie przy użyciu workerów w tle, aby uniknąć ograniczeń serwera.
- Bądź na bieżąco: GroupDocs.Comparison regularnie otrzymuje ulepszenia wydajności — aktualizuj do najnowszej wersji, aby skorzystać z mniejszego zużycia CPU i pamięci.
Najczęściej zadawane pytania
Q: How does GroupDocs.Comparison handle different document formats?
A: It supports 30+ input and output formats—including DOCX, PDF, PPTX, XLSX, and HTML—and can compare files up to 500 MB without loading the entire content into memory.
Q: Can I compare documents with different layouts or structures?
A: Yes. The engine compares content semantically, so structural changes are handled gracefully.
Q: What if the documents are password‑protected?
A: Supply the password when opening the stream; the library will decrypt the file for comparison.
Q: Is there a limit to how many documents I can compare at once?
A: The practical limit is system memory; on a typical development machine, comparing 5‑10 large documents works well.
Q: How can I integrate this into a CI/CD pipeline?
A: Wrap the comparison logic in a console app or a web API, then invoke it from your build scripts to automatically detect documentation changes.
Q: Does the library support multilingual documents?
A: Absolutely. It handles right‑to‑left languages like Arabic and Hebrew, as well as full Unicode character sets.
Dodatkowe zasoby do dalszej nauki
- Documentation – kompleksowa dokumentacja API i zaawansowane tutoriale
- API reference – szczegółowa dokumentacja metod i właściwości
- Download center – najnowsze wydania i dzienniki zmian
- Fora społeczności – połącz się z innymi programistami i uzyskaj pomoc od ekspertów GroupDocs
Ostatnia aktualizacja: 2026-10-05
Testowano z: GroupDocs.Comparison 25.4.0 for .NET
Autor: GroupDocs