Hướng dẫn so sánh tài liệu C# – so sánh nhiều tài liệu Word một cách lập trình
Nếu bạn cần so sánh nhiều tài liệu Word nhanh chóng và chính xác, hướng dẫn này sẽ chỉ cho bạn cách thực hiện với GroupDocs.Comparison cho .NET. Dù bạn đang xem xét hợp đồng, theo dõi các phiên bản, hay hợp nhất các bản nháp từ nhiều tác giả, việc tự động so sánh sẽ loại bỏ việc kiểm tra thủ công từng dòng, giảm lỗi con người, và tạo ra một báo cáo hoàn chỉnh duy nhất làm nổi bật mọi chèn, xóa và sửa đổi.
Trong hướng dẫn này bạn sẽ thành thạo:
- Tải các tệp Word từ stream (lý tưởng cho các tệp lưu trong cơ sở dữ liệu hoặc đám mây)
- Cài đặt GroupDocs.Comparison trong một dự án C# mới
- Tùy chỉnh kiểu hiển thị của văn bản được chèn, xóa và thay đổi
- So sánh bất kỳ số lượng tài liệu mục tiêu trong một lần
- Khắc phục các vấn đề thường gặp và tối ưu hiệu năng cho các tệp lớn
- Các kịch bản thực tế nơi việc so sánh tự động tiết kiệm hàng giờ công việc thủ công
Câu trả lời nhanh
- Thư viện nào tôi nên dùng? GroupDocs.Comparison cho .NET.
- Tôi có thể so sánh nhiều tài liệu Word cùng lúc không? Có – thêm bao nhiêu stream mục tiêu tùy bạn.
- Làm sao tôi có thể làm nổi bật các khác biệt trong Word? Cấu hình
CompareOptionsvớiStyleSettingstùy chỉnh. - Tôi có cần giấy phép cho việc phát triển không? Bản dùng thử miễn phí đủ cho việc học; giấy phép tạm thời sẽ loại bỏ watermark.
- Có hỗ trợ async không? Có – bọc việc so sánh trong
Task.Runđể thực thi không chặn.
Tại sao cần so sánh nhiều tài liệu Word?
Bạn có thể có được một cái nhìn thống nhất duy nhất của tất cả các thay đổi trên mọi phiên bản thay vì phải xử lý các báo cáo riêng lẻ cạnh nhau. Điều này rất quan trọng khi nhiều người đánh giá chỉnh sửa cùng một hợp đồng, khi bạn cần kiểm tra một số bản đề xuất, hoặc khi bạn muốn tạo một tài liệu chính ghi lại mọi sửa đổi. Bằng cách hợp nhất các khác biệt thành một đầu ra duy nhất, các bên liên quan có thể ngay lập tức thấy những gì đã được thêm, xóa hoặc thay đổi mà không cần mở nhiều tệp.
Cách làm nổi bật các khác biệt trong tài liệu Word
Tải tệp nguồn, thêm từng mục tiêu, sau đó áp dụng CompareOptions chỉ định InsertedItemStyle, DeletedItemStyle, và ModifiedItemStyle. Kết quả là một tệp Word trong đó các chèn xuất hiện màu vàng, các xóa có gạch ngang màu đỏ, và các sửa đổi có gạch dưới màu xanh lam, phù hợp với hướng dẫn thương hiệu của tổ chức bạn.
Câu trả lời trực tiếp
GroupDocs.Comparison cho phép bạn đặt kiểu hiển thị qua CompareOptions—bạn định nghĩa màu sắc, phông chữ và kiểu làm nổi bật cho nội dung được chèn, xóa và sửa đổi, sau đó engine sẽ render các kiểu này trực tiếp vào tài liệu Word đầu ra. Bước cấu hình duy nhất này làm cho các khác biệt trở nên rõ ràng cho người xem.
Yêu cầu trước
- Thư viện GroupDocs.Comparison (v25.4.0 hoặc mới hơn) – tương thích với .NET Framework 4.6.1+, .NET Core 2.0+, .NET 5/6/7.
- Visual Studio (bất kỳ phiên bản gần đây nào) hoặc một IDE C# tương đương.
- Kiến thức cơ bản về ứng dụng console C#.
- Một hoặc nhiều tệp mẫu
.docxđể thử nghiệm.
Cài đặt GroupDocs.Comparison và chạy thử
Cài đặt thư viện (cách đơn giản)
Tùy chọn 1: Package Manager Console
Install-Package GroupDocs.Comparison -Version 25.4.0
Tùy chọn 2: .NET CLI (yêu thích cá nhân của tôi)
dotnet add package GroupDocs.Comparison --version 25.4.0
Cấp phép đơn giản
- Free trial: Tính năng đầy đủ với một watermark nhỏ—hoàn hảo cho việc học.
- Temporary license: Loại bỏ watermark cho bản demo; yêu cầu khóa miễn phí từ GroupDocs.
- Production license: Mua giấy phép đầy đủ tại GroupDocs Purchase.
So sánh đầu tiên của bạn (kiểu hello‑world)
Comparer là lớp cốt lõi trong GroupDocs.Comparison điều phối việc tải tài liệu, so sánh và tạo kết quả.
Đoạn mã này tạo một đối tượng Comparer, tải tài liệu nguồn và thêm một tài liệu mục tiêu duy nhất. Hãy nghĩ nó như việc thiết lập so sánh “trước và sau”.
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.");
}
}
}
}
Triển khai đầy đủ – từng bước
Bước 1: thiết lập nền tảng
Comparer được khởi tạo với một stream thay vì đường dẫn tệp, cho bạn khả năng linh hoạt làm việc với tài liệu lưu trong cơ sở dữ liệu hoặc nhận qua mạng.
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
}
Bước 2: thêm nhiều tài liệu mục tiêu
Bây giờ bạn có thể so sánh nhiều tài liệu Word trong một lần chạy. GroupDocs.Comparison thông minh hợp nhất tất cả các khác biệt thành một tệp kết quả duy nhất.
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")));
Bước 3: làm nổi bật các khác biệt (tùy chỉnh kiểu)
CompareOptions cho phép bạn chỉ định hành vi so sánh và kiểu hiển thị cho nội dung được chèn, xóa và sửa đổi.StyleSettings định nghĩa giao diện hiển thị (màu, phông, làm nổi bật) áp dụng cho các khác biệt trong tài liệu đầu ra.
CompareOptions compareOptions = new CompareOptions()
{
InsertedItemStyle = new StyleSettings()
{
FontColor = System.Drawing.Color.Yellow // Highlight inserted text in yellow
}
};
Bước 4: thực thi so sánh và lưu kết quả
Dòng duy nhất dưới đây thực hiện việc so sánh trên tất cả các mục tiêu và ghi một tài liệu kết quả hoàn chỉnh. Vì chúng ta sử dụng File.Create(), bạn có thể thay thế stream bằng một đích lưu trữ trong cơ sở dữ liệu hoặc đám mây.
string outputDirectory = "YOUR_OUTPUT_DIRECTORY";
string outputFileName = System.IO.Path.Combine(outputDirectory, "RESULT_WORD.docx");
comparer.Compare(File.Create(outputFileName), compareOptions);
Các vấn đề thường gặp và cách giải quyết
Vấn đề: lỗi “File not found”
Luôn kiểm tra rằng các đường dẫn tệp bạn truyền vào File.OpenRead (hoặc tương đương) thực sự tồn tại và có thể truy cập được từ tiến trình đang chạy.
string sourcePath = System.IO.Path.Combine(documentDirectory, "SOURCE_WORD.docx");
if (!File.Exists(sourcePath))
{
throw new FileNotFoundException($"Source document not found: {sourcePath}");
}
Vấn đề: vấn đề bộ nhớ với tài liệu lớn
Giải phóng các stream kịp thời bằng cách sử dụng câu lệnh using. GroupDocs.Comparison xử lý tài liệu theo từng khối, vì vậy việc giữ các stream mở không cần thiết có thể làm tăng mức sử dụng bộ nhớ.
// 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
}
Vấn đề: kết quả so sánh không mong đợi
Điều chỉnh các cài đặt độ nhạy trong CompareOptions để bỏ qua các yếu tố như thay đổi header/footer, số trang, hoặc metadata không liên quan đến việc đánh giá của bạn.
CompareOptions options = new CompareOptions()
{
CompareBookmarks = false, // Ignore bookmark differences
CompareComments = false, // Ignore comment differences
CompareFields = false // Ignore field differences
};
So sánh bất đồng bộ cho ứng dụng web
Bọc lời gọi so sánh trong Task.Run để giữ cho các luồng UI phản hồi và tránh chặn pipeline yêu cầu của 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());
});
}
}
Mẹo tối ưu hiệu năng
- Dispose streams ngay sau khi sử dụng (
usingblocks). - Process documents sequentially khi có thể; xử lý song song có thể tăng áp lực bộ nhớ.
- Leverage async patterns cho API web để cải thiện khả năng mở rộng.
- Queue large batches với một worker nền để tránh làm chậm máy chủ web.
- Stay current: GroupDocs.Comparison nhận các cải tiến hiệu năng thường xuyên—nâng cấp lên phiên bản mới nhất để hưởng lợi từ việc giảm tải CPU và bộ nhớ.
Câu hỏi thường gặp
Q: GroupDocs.Comparison xử lý các định dạng tài liệu khác nhau như thế nào?
A: Nó hỗ trợ hơn 30 định dạng đầu vào và đầu ra—bao gồm DOCX, PDF, PPTX, XLSX và HTML—và có thể so sánh các tệp lên tới 500 MB mà không cần tải toàn bộ nội dung vào bộ nhớ.
Q: Tôi có thể so sánh tài liệu với bố cục hoặc cấu trúc khác nhau không?
A: Có. Engine so sánh nội dung theo ngữ nghĩa, vì vậy các thay đổi cấu trúc được xử lý một cách mềm dẻo.
Q: Nếu tài liệu được bảo vệ bằng mật khẩu thì sao?
A: Cung cấp mật khẩu khi mở stream; thư viện sẽ giải mã tệp để so sánh.
Q: Có giới hạn số lượng tài liệu tôi có thể so sánh cùng lúc không?
A: Giới hạn thực tế là bộ nhớ hệ thống; trên máy phát triển thông thường, việc so sánh 5‑10 tài liệu lớn hoạt động tốt.
Q: Làm sao tôi có thể tích hợp điều này vào pipeline CI/CD?
A: Bọc logic so sánh trong một ứng dụng console hoặc API web, sau đó gọi nó từ script build để tự động phát hiện thay đổi tài liệu.
Q: Thư viện có hỗ trợ tài liệu đa ngôn ngữ không?
A: Hoàn toàn có. Nó xử lý các ngôn ngữ viết từ phải sang trái như Arabic và Hebrew, cũng như toàn bộ bộ ký tự Unicode.
Tài nguyên bổ sung để học sâu hơn
- Documentation – tài liệu tham khảo API toàn diện và các hướng dẫn nâng cao
- API reference – tài liệu chi tiết về phương thức và thuộc tính
- Download center – các bản phát hành mới nhất và nhật ký thay đổi
- Community forums – kết nối với các nhà phát triển khác và nhận trợ giúp từ các chuyên gia GroupDocs
Cập nhật lần cuối: 2026-10-05
Được kiểm tra với: GroupDocs.Comparison 25.4.0 for .NET
Tác giả: GroupDocs