Cách so sánh tệp XLSX trong C# bằng Streams – Hướng dẫn đầy đủ
So sánh các bảng tính Excel theo cách thủ công là tốn thời gian và dễ gây lỗi, đặc biệt khi bạn cần xác thực các báo cáo tài chính lớn hoặc kiểm toán các bộ dữ liệu. Trong hướng dẫn này, bạn sẽ khám phá cách so sánh xlsx một cách hiệu quả với GroupDocs.Comparison cho .NET sử dụng xử lý dựa trên stream. Chúng tôi sẽ hướng dẫn từng bước, giải thích lý do streams quan trọng, và cung cấp các mẹo thực tế mà bạn có thể sao chép vào dự án của mình.
Câu trả lời nhanh
- Thư viện nào xử lý so sánh Excel? GroupDocs.Comparison for .NET.
- Tôi có thể so sánh tệp mà không lưu chúng vào đĩa không? Có—sử dụng streams để làm việc trực tiếp với dữ liệu trong bộ nhớ.
- Cần giấy phép cho môi trường production không? Giấy phép thương mại là bắt buộc; bản dùng thử miễn phí có sẵn.
- Các phiên bản .NET nào được hỗ trợ? .NET Framework 4.5+, .NET Core 3.1+, .NET 5/6/7.
- Có bao nhiêu định dạng Excel được hỗ trợ? Hơn 20, bao gồm .xls, .xlsx, .xlsm và .csv.
“cách so sánh xlsx” là gì?
“Cách so sánh xlsx” đề cập đến việc phát hiện sự khác biệt giữa hai tệp workbook Excel một cách lập trình. GroupDocs.Comparison cho .NET đọc mỗi workbook, đánh giá các thay đổi ở mức ô, và tạo một tài liệu kết quả được đánh dấu hiển thị các chèn, xóa và sửa đổi. So sánh sẽ làm nổi bật các ô, hàng và sheet đã thay đổi, giúp dễ dàng xem xét sự khác biệt chỉ trong một cái nhìn.
Tại sao nên sử dụng so sánh dựa trên stream?
Xử lý bằng stream giảm áp lực bộ nhớ bằng cách đọc tệp theo các khối thay vì tải toàn bộ workbook vào RAM. GroupDocs.Comparison có thể xử lý hơn 50 định dạng đầu vào và đầu ra và xử lý các bảng tính có hàng trăm trang trong khi giữ mức sử dụng bộ nhớ tối đa dưới 100 MB trên phần cứng máy chủ điển hình. Điều này làm cho nó trở nên lý tưởng cho dịch vụ web, micro‑services và các công việc batch tại chỗ.
Yêu cầu trước
- GroupDocs.Comparison cho .NET – tải xuống từ trang chính thức here.
- Môi trường phát triển C# – Visual Studio 2022 hoặc bất kỳ IDE nào hỗ trợ .NET 6+.
- Tệp Excel – hai workbook
.xlsxbạn muốn so sánh. - Hiểu biết cơ bản về streams – các khái niệm
System.IO.Streamđược sử dụng xuyên suốt ví dụ.
Nhập các Namespace
Các namespace sau cung cấp cho bạn quyền truy cập vào engine so sánh và các tiện ích stream.
Namespace GroupDocs.Comparison chứa các lớp so sánh cốt lõi, trong khi System.IO cung cấp các kiểu FileStream và MemoryStream cần thiết cho việc xử lý stream.
Hướng dẫn triển khai từng bước
Sử dụng streams ảnh hưởng như thế nào đến hiệu năng?
Tải mỗi workbook bằng File.OpenRead() và truyền stream kết quả trực tiếp cho comparer. Cách tiếp cận này tránh các tệp tạm thời, giảm thời gian I/O lên tới 30 % trên ổ SSD, và giữ quá trình hoàn toàn trong bộ nhớ, điều này rất quan trọng cho các API web có lưu lượng cao.
Bước 1: Khởi tạo biến đầu ra
Xác định nơi kết quả so sánh sẽ được lưu. Sử dụng Path.Combine() đảm bảo dấu phân tách thư mục đúng trên Windows, Linux hoặc macOS.
Mẹo: Trong môi trường production, ghi đầu ra vào thư mục tạm thời hoặc bucket lưu trữ đám mây để giữ thư mục ứng dụng sạch sẽ.
Bước 2: Tạo đối tượng Comparer
Lớp Comparer là thành phần trung tâm điều phối việc so sánh hai hoặc nhiều tài liệu.
Tạo một thể hiện Comparer bằng cách mở workbook nguồn với File.OpenRead(). Câu lệnh using đảm bảo rằng stream tệp được đóng tự động, ngăn ngừa rò rỉ handle tệp.
Bước 3: Thêm tài liệu mục tiêu
Thêm workbook thứ hai vào comparer. Bạn có thể chuỗi các mục tiêu bổ sung nếu cần so sánh một tệp master với nhiều biến thể — hữu ích cho báo cáo khu vực hoặc các kịch bản kiểm soát phiên bản.
Bước 4: Thực hiện so sánh
Gọi phương thức Compare để tạo tài liệu diff. Kết quả được ghi vào một stream mới được tạo bằng File.Create(). Tệp đầu ra làm nổi bật tất cả các ô, hàng và sheet đã thay đổi, giúp việc xem xét trực quan trở nên đơn giản.
Phương thức Compare thực thi việc so sánh và trả về tài liệu kết quả dưới dạng stream.
Bước 5: Hiển thị thông báo thành công
Sau khi so sánh hoàn tất, ghi lại một thông báo thành công ngắn gọn bao gồm đường dẫn đầu ra. Trong một API thực tế, bạn sẽ trả về stream cho người gọi hoặc lưu nó vào lưu trữ đám mây để truy xuất sau.
Các vấn đề thường gặp và khắc phục
- Lỗi file‑in‑use: Đảm bảo không có tiến trình nào khác (bao gồm Excel) mở tệp. Streams mở bằng
File.OpenRead()nhận khóa chia sẻ chỉ đọc, giúp giảm hầu hết xung đột. - Tăng đột biến bộ nhớ với tệp lớn: Đối với workbook vượt quá 100 MB, bật cờ
ComparerOptionsEnableMemoryOptimization(nếu có) và giám sát bộ nhớ riêng của tiến trình. - So sánh định dạng hỗn hợp: GroupDocs.Comparison hỗ trợ các cặp định dạng nhất quán; tránh so sánh tệp
.xlsvới.xlsxtrong cùng một thao tác để tránh lỗi bố cục. - Vị trí stream: Khi tái sử dụng một stream, luôn đặt lại vị trí bằng
stream.Seek(0, SeekOrigin.Begin)trước khi truyền cho comparer.
Xử lý lỗi mạnh mẽ: Bắt ComparisonException cho các workbook bị hỏng và ghi lại tên tệp để điều tra sau.ComparisonException được ném bởi GroupDocs.Comparison khi tài liệu đầu vào bị hỏng hoặc sử dụng định dạng không được hỗ trợ.
Hiệu năng và các thực hành tốt nhất
- Giải phóng streams kịp thời: Đặt mỗi
FileStreamtrong một khốiusing. - Xử lý batch: Sử dụng
Parallel.ForEachvới các comparer async để xử lý đồng thời nhiều cặp tệp, nhưng giới hạn mức độ song song để tránh quá tải CPU. - Xử lý lỗi mạnh mẽ: Bắt
ComparisonExceptioncho các workbook bị hỏng và ghi lại tên tệp để điều tra sau. - Xác thực streams đầu vào: Kiểm tra MIME type hoặc header tệp trước khi so sánh để từ chối các tệp không phải Excel sớm.
ComparerOptions cung cấp các cài đặt cấu hình cho quá trình so sánh, như tối ưu hóa bộ nhớ và điều khiển độ nhạy.
Các kịch bản sử dụng nâng cao
- So sánh BLOB từ CSDL: Lấy BLOB Excel từ SQL Server, đóng gói trong
MemoryStream, và truyền trực tiếp cho comparer—không cần tệp tạm thời. - Tích hợp lưu trữ đám mây: Sử dụng Azure Blob Storage SDK để lấy
BlobStreamvà truyền cho comparer, cho phép quy trình làm việc hoàn toàn không máy chủ. - Endpoint API thời gian thực: Mở một endpoint POST nhận hai tệp multipart/form‑data, so sánh ngay lập tức, và trả về diff dưới dạng stream có thể tải xuống.
Kết luận
Bằng cách tận dụng API dựa trên stream của GroupDocs.Comparison, bạn có được cách tiết kiệm bộ nhớ, an toàn, và có khả năng mở rộng để so sánh các tệp XLSX trong C#. Hướng dẫn này đã bao phủ mọi thứ từ cài đặt đến các kịch bản đám mây nâng cao, cung cấp cho bạn nền tảng vững chắc để tích hợp so sánh bảng tính vào bất kỳ giải pháp .NET nào.
Câu hỏi thường gặp
Q: GroupDocs.Comparison cho .NET có tương thích với mọi định dạng Excel không?
A: Có, nó hỗ trợ hơn 20 định dạng liên quan đến Excel, bao gồm .xls, .xlsx, .xlsm và .csv, đảm bảo tính tương thích rộng rãi cho cả workbook cũ và mới.
Q: Tôi có thể tùy chỉnh kiểu hiển thị của kết quả so sánh không?
A: Chắc chắn. API cho phép bạn đặt màu highlight, thay đổi kiểu viền, và điều chỉnh mức độ nhạy cảm của thay đổi thông qua ComparisonOptions.
Q: Tôi có cần giấy phép thương mại cho việc sử dụng trong production không?
A: Một giấy phép GroupDocs.Comparison hợp lệ là bắt buộc cho bất kỳ triển khai thương mại nào. Bạn có thể mua một giấy phép here.
Q: Có bản dùng thử miễn phí không?
A: Có, bạn có thể tải bản dùng thử đầy đủ chức năng here để đánh giá tất cả tính năng trước khi mua.
Q: Tôi có thể nhận hỗ trợ cộng đồng ở đâu?
A: Diễn đàn GroupDocs.Comparison here là nơi hoạt động để đặt câu hỏi và chia sẻ giải pháp với các nhà phát triển khác.
Cập nhật lần cuối: 2026-06-21
Kiểm tra với: GroupDocs.Comparison 23.10 cho .NET
Tác giả: 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}.");