Cách so sánh tệp Excel trong .NET

Bạn đã bao giờ tự kiểm tra thủ công sự khác nhau giữa hai tệp Excel chưa? Cho dù bạn đang theo dõi các thay đổi trong báo cáo tài chính, so sánh các phiên bản bộ dữ liệu, hoặc kiểm toán tính toàn vẹn của dữ liệu, việc so sánh thủ công vừa tốn thời gian vừa dễ gây lỗi. Trong hướng dẫn này, bạn sẽ học cách so sánh các tệp excel một cách nhanh chóng và đáng tin cậy bằng cách sử dụng GroupDocs.Comparison cho .NET.

Câu trả lời nhanh

  • Thư viện nào tôi có thể sử dụng? GroupDocs.Comparison for .NET
  • Cần bao nhiêu dòng mã? Ít hơn 10 dòng cho một diff cơ bản
  • Tôi có thể so sánh các workbook Excel lớn không? Có – sử dụng các tùy chọn hiệu năng để xử lý các tệp lớn
  • Tôi có cần giấy phép không? Bản dùng thử miễn phí hoạt động cho việc thử nghiệm; giấy phép thương mại cần thiết cho môi trường sản xuất
  • Có thể tự động hoá việc so sánh excel trong một web API không? Chắc chắn – xem ví dụ controller ASP.NET

Tại sao nên so sánh tệp Excel bằng lập trình?

Trước khi chúng ta bắt đầu với mã, hãy nói về lý do tại sao việc so sánh Excel tự động là một bước đột phá:

  • Version Control – Tự động theo dõi các thay đổi giữa các phiên bản tài liệu mà không cần mở tệp thủ công
  • Data Auditing – Đảm bảo tính nhất quán của dữ liệu giữa các phòng ban và hệ thống
  • Quality Assurance – Bắt các sai lệch trong báo cáo trước khi chúng đến tay các bên liên quan
  • Workflow Automation – Tích hợp logic so sánh vào các quy trình kinh doanh lớn hơn

Thư viện GroupDocs.Comparison xử lý toàn bộ công việc nặng, vì vậy bạn không cần lo lắng về việc phân tích định dạng Excel hay triển khai các thuật toán diff phức tạp.

Công cụ Diff tệp Excel là gì?

Một excel file diff tool so sánh hai phiên bản bảng tính và làm nổi bật các phần thêm, xóa và sửa đổi. GroupDocs.Comparison hoạt động như một công cụ diff mạnh mẽ, lập trình, hoạt động trực tiếp từ mã .NET của bạn.

Yêu cầu trước và Cài đặt

Những gì bạn cần

  • Môi trường phát triển: Visual Studio 2019 hoặc mới hơn (VS Code cũng hoạt động được)
  • Thư viện GroupDocs.Comparison: Phiên bản 25.4.0 hoặc mới hơn
  • Kiến thức cơ bản: Quen thuộc với C# và xử lý tệp trong .NET
  • Tệp mẫu: Hai tệp Excel để thử nghiệm (chúng tôi sẽ chỉ cho bạn cách tạo các kịch bản kiểm thử)

Cài đặt GroupDocs.Comparison cho .NET

Bạn có một số tùy chọn cài đặt:

Tùy chọn 1: NuGet Package Manager Console

dotnet add package GroupDocs.Comparison --version 25.4.0

Tùy chọn 2: Visual Studio Package Manager

  1. Nhấp chuột phải vào dự án của bạn trong Solution Explorer
  2. Chọn Manage NuGet Packages
  3. Tìm kiếm GroupDocs.Comparison
  4. Cài đặt phiên bản mới nhất

Các tùy chọn cấp phép

Khi bạn bắt đầu, bạn có thể sử dụng GroupDocs.Comparison với bản dùng thử miễn phí. Đối với môi trường sản xuất, bạn sẽ cần một giấy phép:

  • Free Trial: Tính năng đầy đủ với watermark đánh giá
  • Temporary License: Request here để thử nghiệm
  • Commercial License: Purchase options cho môi trường sản xuất

Cách so sánh tệp Excel bằng GroupDocs.Comparison

Bây giờ chúng ta sẽ xây dựng một giải pháp so sánh tệp Excel hoàn chỉnh. Chúng ta sẽ bắt đầu đơn giản và thêm các tính năng tinh vi hơn khi tiến triển.

Bước 1: Thiết lập dự án cơ bản

Đầu tiên, tạo một dự án C# mới và thêm các câu lệnh using cần thiết:

using GroupDocs.Comparison;
using System;
using System.IO;

Bước 2: Cấu hình đường dẫn tệp

Thiết lập các đường dẫn tệp của bạn một cách sạch sẽ và dễ bảo trì:

string documentDirectory = "YOUR_DOCUMENT_DIRECTORY";
string resultOutputDirectory = "YOUR_OUTPUT_DIRECTORY";

string sourceFilePath = Path.Combine(documentDirectory, "source_cells.xlsx");
string targetFilePath = Path.Combine(documentDirectory, "target_cells.xlsx");
string resultFilePath = Path.Combine(resultOutputDirectory, "comparison_result.xlsx");

Mẹo chuyên nghiệp: Sử dụng đường dẫn tương đối để tăng khả năng di động giữa các môi trường phát triển. Một thứ như Path.Combine("TestData", "source_cells.xlsx") hoạt động tốt cho hầu hết các kịch bản.

Bước 3: Khởi tạo Comparer

Đây là nơi phép thuật xảy ra. Lớp Comparer là điểm vào cho tất cả các hoạt động so sánh:

using (Comparer comparer = new Comparer(sourceFilePath))
{
    // Add target file for comparison
    comparer.Add(targetFilePath);
}

Điều gì đang xảy ra ở đây? Hàm khởi tạo Comparer tải tệp Excel nguồn của bạn vào bộ nhớ và chuẩn bị cho việc so sánh. Câu lệnh using đảm bảo việc dọn dẹp tài nguyên đúng cách – điều này rất quan trọng khi xử lý các tệp Excel có kích thước lớn.

Bước 4: Thực hiện so sánh

Bây giờ là phần so sánh thực tế. Nó bất ngờ đơn giản:

using (Comparer comparer = new Comparer(sourceFilePath))
{
    comparer.Add(targetFilePath);
    // Compare and save results
    comparer.Compare(resultFilePath);
}

Phía sau, GroupDocs.Comparison phân tích cả hai tệp theo từng ô, xác định:

  • Các hàng và cột được thêm
  • Nội dung bị xóa
  • Giá trị ô đã thay đổi
  • Thay đổi định dạng
  • Sự khác biệt công thức

Kết quả được lưu vào tệp đầu ra bạn chỉ định với các khác biệt được làm nổi bật rõ ràng.

Bước 5: Ví dụ làm việc hoàn chỉnh

Đây là một ví dụ hoàn chỉnh, sẵn sàng cho sản xuất mà bạn có thể sử dụng ngay lập tức:

using GroupDocs.Comparison;
using System;
using System.IO;

class Program
{
    static Main()
    {
        try
        {
            // Set up file paths
            string documentDirectory = @"C:\TestFiles";
            string outputDirectory = @"C:\ComparisonResults";
            
            string sourceFile = Path.Combine(documentDirectory, "quarterly_report_v1.xlsx");
            string targetFile = Path.Combine(documentDirectory, "quarterly_report_v2.xlsx");
            string resultFile = Path.Combine(outputDirectory, "comparison_result.xlsx");
            
            // Ensure output directory exists
            Directory.CreateDirectory(outputDirectory);
            
            // Perform comparison
            using (Comparer comparer = new Comparer(sourceFile))
            {
                comparer.Add(targetFile);
                comparer.Compare(resultFile);
            }
            
            Console.WriteLine($"Comparison complete! Results saved to: {resultFile}");
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Error during comparison: {ex.Message}");
        }
    }
}

Tự động hoá so sánh Excel – Các tùy chọn cấu hình nâng cao

So sánh cơ bản rất mạnh mẽ, nhưng bạn có thể cần kiểm soát nhiều hơn quá trình. Dưới đây là một số tùy chọn nâng cao.

Tùy chỉnh cài đặt so sánh

using (Comparer comparer = new Comparer(sourceFilePath))
{
    comparer.Add(targetFilePath);
    
    // Configure comparison options
    CompareOptions options = new CompareOptions()
    {
        ShowRevisions = true,
        DetectStyleChanges = true,
        GenerateSummaryPage = true
    };
    
    comparer.Compare(resultFilePath, options);
}

So sánh nhiều tệp

Cần so sánh hơn hai tệp? Không vấn đề:

using (Comparer comparer = new Comparer(sourceFilePath))
{
    comparer.Add(targetFile1Path);
    comparer.Add(targetFile2Path);
    comparer.Add(targetFile3Path);
    
    comparer.Compare(resultFilePath);
}

Các ví dụ thực tế triển khai

Kịch bản 1: Xác thực báo cáo tài chính

public class FinancialReportValidator
{
    public bool ValidateReportChanges(string previousReport, string currentReport)
    {
        string comparisonResult = Path.GetTempFileName() + ".xlsx";
        
        using (Comparer comparer = new Comparer(previousReport))
        {
            comparer.Add(currentReport);
            comparer.Compare(comparisonResult);
            
            // Check if there are significant changes
            return HasSignificantChanges(comparisonResult);
        }
    }
    
    private bool HasSignificantChanges(string comparisonFile)
    {
        // Your business logic here
        // For example, check if revenue columns changed by more than 5%
        return false;
    }
}

Kịch bản 2: Xác minh di chuyển dữ liệu

public class DataMigrationValidator
{
    public async Task<bool> VerifyMigration(string sourceData, string migratedData)
    {
        try
        {
            string resultPath = $"migration_validation_{DateTime.Now:yyyyMMdd_HHmmss}.xlsx";
            
            using (Comparer comparer = new Comparer(sourceData))
            {
                comparer.Add(migratedData);
                comparer.Compare(resultPath);
            }
            
            // Send result to stakeholders
            await NotifyStakeholders(resultPath);
            return true;
        }
        catch (Exception ex)
        {
            // Log error and handle gracefully
            Console.WriteLine($"Migration validation failed: {ex.Message}");
            return false;
        }
    }
}

Các vấn đề thường gặp và giải pháp

Ngay cả với một API đơn giản, bạn vẫn có thể gặp một số thách thức. Dưới đây là các vấn đề phổ biến nhất và cách giải quyết chúng.

Vấn đề 1: “File is being used by another process”

Vấn đề: Các tệp Excel bị các ứng dụng khác khóa.
Giải pháp: Luôn sử dụng câu lệnh using và đảm bảo Excel không mở:

// Good practice
using (Comparer comparer = new Comparer(sourceFilePath))
{
    // Your comparison logic
}

// Check if file is in use before comparison
private bool IsFileLocked(string filePath)
{
    try
    {
        using (FileStream stream = File.Open(filePath, FileMode.Open, FileAccess.Read, FileShare.None))
        {
            return false;
        }
    }
    catch (IOException)
    {
        return true;
    }
}

Vấn đề 2: Hiệu năng tệp lớn

Vấn đề: Việc so sánh mất quá nhiều thời gian với các tệp Excel lớn.
Giải pháp: Xem xét các chiến lược tối ưu hóa sau:

// Process files in chunks or limit comparison scope
CompareOptions options = new CompareOptions()
{
    // Only compare content, skip formatting for speed
    DetectStyleChanges = false,
    
    // Limit comparison to specific ranges if possible
    // Note: Range limitation may require custom implementation
};

Vấn đề 3: Tiêu thụ bộ nhớ

Vấn đề: Ứng dụng sử dụng quá nhiều bộ nhớ với các tệp lớn.
Giải pháp: Triển khai quản lý tài nguyên đúng cách:

public void CompareFilesWithMemoryManagement(string source, string target, string output)
{
    // Ensure garbage collection
    GC.Collect();
    GC.WaitForPendingFinalizers();
    
    using (Comparer comparer = new Comparer(source))
    {
        comparer.Add(target);
        comparer.Compare(output);
    }
    
    // Force cleanup
    GC.Collect();
}

Mẹo tối ưu hoá hiệu năng – Phát hiện thay đổi Excel nhanh hơn

Thực hành tốt quản lý bộ nhớ

  1. Luôn sử dụng câu lệnh using để tự động giải phóng tài nguyên
  2. Xử lý tệp tuần tự thay vì song song cho các tệp lớn
  3. Xem xét giới hạn kích thước tệp – chia các tệp khổng lồ thành các phần nhỏ hơn
  4. Giám sát việc sử dụng bộ nhớ trong quá trình phát triển và kiểm thử

Tối ưu hoá tốc độ

// Optimize for speed
CompareOptions fastOptions = new CompareOptions()
{
    DetectStyleChanges = false,        // Skip formatting comparison
    ShowRevisions = false,             // Skip revision tracking
    GenerateSummaryPage = false        // Skip summary generation
};

Chiến lược xử lý hàng loạt – So sánh các workbook Excel lớn một cách hiệu quả

public async Task CompareMultipleFilePairs(List<(string source, string target)> filePairs)
{
    foreach (var (source, target) in filePairs)
    {
        string output = $"comparison_{Path.GetFileNameWithoutExtension(source)}.xlsx";
        
        using (Comparer comparer = new Comparer(source))
        {
            comparer.Add(target);
            comparer.Compare(output);
        }
        
        // Small delay to prevent resource exhaustion
        await Task.Delay(100);
    }
}

Tích hợp với ứng dụng ASP.NET – Tự động hoá so sánh Excel qua API

Bạn muốn thêm tính năng so sánh Excel vào ứng dụng web của mình? Đây là một ví dụ controller cơ bản:

[ApiController]
[Route("api/[controller]")]
public class ExcelComparisonController : ControllerBase
{
    [HttpPost("compare")]
    public async Task<IActionResult> CompareExcelFiles(IFormFile sourceFile, IFormFile targetFile)
    {
        if (sourceFile == null || targetFile == null)
            return BadRequest("Both source and target files are required.");
        
        try
        {
            // Save uploaded files temporarily
            string tempDir = Path.GetTempPath();
            string sourcePath = Path.Combine(tempDir, sourceFile.FileName);
            string targetPath = Path.Combine(tempDir, targetFile.FileName);
            string resultPath = Path.Combine(tempDir, $"comparison_{Guid.NewGuid()}.xlsx");
            
            using (var sourceStream = new FileStream(sourcePath, FileMode.Create))
            {
                await sourceFile.CopyToAsync(sourceStream);
            }
            
            using (var targetStream = new FileStream(targetPath, FileMode.Create))
            {
                await targetFile.CopyToAsync(targetStream);
            }
            
            // Perform comparison
            using (Comparer comparer = new Comparer(sourcePath))
            {
                comparer.Add(targetPath);
                comparer.Compare(resultPath);
            }
            
            // Return result file
            var resultBytes = await System.IO.File.ReadAllBytesAsync(resultPath);
            
            // Cleanup temporary files
            System.IO.File.Delete(sourcePath);
            System.IO.File.Delete(targetPath);
            System.IO.File.Delete(resultPath);
            
            return File(resultBytes, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "comparison_result.xlsx");
        }
        catch (Exception ex)
        {
            return StatusCode(500, $"Comparison failed: {ex.Message}");
        }
    }
}

Khi nào nên sử dụng so sánh tệp Excel

So sánh Excel đặc biệt có giá trị trong các kịch bản sau:

Dịch vụ tài chính

  • Quarterly Report Reviews – so sánh báo cáo quý hiện tại với báo cáo quý trước
  • Budget Tracking – giám sát thay đổi ngân sách giữa các phòng ban
  • Audit Preparation – đảm bảo tính nhất quán dữ liệu trước các cuộc kiểm toán bên ngoài

Quản lý dữ liệu

  • ETL Validation – xác minh các chuyển đổi dữ liệu trong quá trình di chuyển
  • Quality Assurance – đảm bảo dữ liệu nhập khẩu khớp với hệ thống nguồn
  • Version Control – theo dõi các thay đổi trong các tệp dữ liệu chính

Business Intelligence

  • Report Validation – so sánh các báo cáo tự động với các tính toán thủ công
  • Data Reconciliation – khớp dữ liệu giữa các hệ thống khác nhau
  • Change Tracking – giám sát các thay đổi KPI theo thời gian

Câu hỏi thường gặp

Q: Kích thước tệp tối đa mà GroupDocs.Comparison có thể xử lý là bao nhiêu?
A: Thư viện có thể xử lý các tệp lên tới vài trăm MB, nhưng hiệu năng phụ thuộc vào bộ nhớ khả dụng. Đối với các tệp lớn hơn 50 MB, hãy xem xét triển khai xử lý theo khối hoặc các phương pháp streaming.

Q: Tôi có thể so sánh các tệp Excel được bảo vệ bằng mật khẩu không?
A: Có, nhưng bạn cần cung cấp mật khẩu trong quá trình so sánh. Thư viện hỗ trợ các tệp Excel được mã hóa với thông tin xác thực phù hợp.

Q: Độ chính xác của việc so sánh đối với các tệp Excel phức tạp có công thức như thế nào?
A: GroupDocs.Comparison phát hiện chính xác các thay đổi công thức, bao gồm tham chiếu ô và sửa đổi hàm. Nó coi công thức là thay đổi nội dung và làm nổi bật chúng tương ứng.

Q: Tôi có thể tùy chỉnh đầu ra trực quan của kết quả so sánh không?
A: Thư viện cung cấp một số kiểu làm nổi bật tích hợp. Đối với kiểu tùy chỉnh, bạn có thể xử lý hậu kỳ tệp đầu ra hoặc khám phá các tùy chọn styling của API.

Q: Có cách nào để chỉ so sánh các worksheet cụ thể trong một tệp Excel không?
A: Mặc dù thư viện mặc định so sánh toàn bộ tệp, bạn có thể tiền xử lý các tệp để trích xuất các worksheet cụ thể trước khi so sánh, hoặc hậu xử lý kết quả để lọc các thay đổi liên quan.

Q: GroupDocs.Comparison phát hiện các thay đổi Excel như thế nào?
A: Nó thực hiện diff theo từng ô, kiểm tra giá trị, công thức, định dạng và các thay đổi cấu trúc như thêm hoặc xóa hàng/cột.

Q: Công cụ có hoạt động tốt với các workbook Excel rất lớn không?
A: Có – bằng cách tắt phát hiện kiểu (DetectStyleChanges = false) và sử dụng xử lý hàng loạt, bạn có thể so sánh hiệu quả các tệp Excel lớn.

Tài nguyên bổ sung


Cập nhật lần cuối: 2026-04-10
Kiểm tra với: GroupDocs.Comparison 25.4.0
Tác giả: GroupDocs