文件比較 C# 教程 – 程式化比較多個 Word 文件

如果您需要快速且精確地比較多個 Word 文件,本教程將向您展示如何使用 GroupDocs.Comparison for .NET 來完成。無論是審核合約、追蹤修訂,或是整合多位作者的草稿,將比較自動化可省去手動逐行檢查、減少人為錯誤,並產生一份完整的報告,突顯每一次的插入、刪除與修改。

本指南您將掌握:

  • 從串流載入 Word 檔案(適用於儲存在資料庫或雲端的檔案)
  • 在全新 C# 專案中設定 GroupDocs.Comparison
  • 自訂插入、刪除與變更文字的視覺樣式
  • 一次性比較任意數量的目標文件
  • 排除常見問題並為大型檔案調校效能
  • 自動化比較可節省數小時手動工作的實務情境

快速回答

  • 應該使用哪個函式庫? GroupDocs.Comparison for .NET。
  • 我可以一次比較多個 Word 文件嗎? 可以 – 依需求加入任意數量的目標串流。
  • 如何在 Word 中突顯差異? 使用 CompareOptions 搭配自訂的 StyleSettings。
  • 開發時需要授權嗎? 免費試用可供學習;臨時授權可移除浮水印。
  • 是否支援非同步? 可以 – 將比較包在 Task.Run 中以避免阻塞執行。

為何比較多個 Word 文件?

您可以取得單一統一視圖,查看所有版本的變更,而不必同時處理多個並排報告。這在多位審閱者編輯同一合約、需要稽核多份提案草稿,或想產生記錄所有修訂的主文件時尤為重要。透過將差異合併成一個輸出,利害關係人可即時看到新增、刪除或變更的內容,無需開啟多個檔案。

如何在 Word 文件中突顯差異

載入來源檔案,逐一加入目標檔案,然後套用指定 InsertedItemStyle、DeletedItemStyle、ModifiedItemStyle 的 CompareOptions。最終的 Word 檔案會以黃色顯示插入、紅色刪除線顯示刪除、藍色底線顯示修改,符合貴公司的品牌指引。

直接回答

GroupDocs.Comparison 讓您透過 CompareOptions 設定視覺樣式——您可以為插入、刪除與修改的內容定義顏色、字型與突顯類型,然後引擎會直接將這些樣式渲染到輸出的 Word 文件中。這一步的單一設定即可讓差異對審閱者一目了然。

先決條件

  • GroupDocs.Comparison library (v25.4.0 or newer) – 相容於 .NET Framework 4.6.1+、.NET Core 2.0+、.NET 5/6/7。
  • Visual Studio (any recent edition) 或其他相容的 C# IDE。
  • 基本熟悉 C# 主控台應用程式。
  • 一或多個 .docx 範例檔案以供測試。

開始使用 GroupDocs.Comparison

安裝函式庫(簡易方式)

選項 1:Package Manager Console

Install-Package GroupDocs.Comparison -Version 25.4.0

選項 2:.NET CLI(我個人最喜歡的)

dotnet add package GroupDocs.Comparison --version 25.4.0

授權簡易說明

  • 免費試用: 完整功能加上小浮水印——適合學習使用。
  • 臨時授權: 移除示範用浮水印;可向 GroupDocs 申請免費金鑰。
  • 正式授權: 前往 GroupDocs Purchase 購買完整授權。

您的第一個比較(Hello‑World 範例)

Comparer 是 GroupDocs.Comparison 的核心類別,負責協調文件載入、比較與結果產生。
以下程式碼片段建立 Comparer 物件,載入來源文件,並加入單一目標文件。可視為設定「前後」比較。

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.");
            }
        }
    }
}

完整實作 – 步驟說明

步驟 1:建立基礎

Comparer 以 stream 而非檔案路徑實例化,讓您能彈性處理儲存在資料庫或透過網路接收的文件。

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
}

步驟 2:加入多個目標文件

現在您可以在一次執行中比較多個 Word 文件。GroupDocs.Comparison 會智慧地將所有差異合併成一個結果檔案。

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")));

步驟 3:讓差異突顯(自訂樣式)

CompareOptions 允許您指定比較行為與插入、刪除、修改內容的視覺樣式。
StyleSettings 定義在輸出文件中套用於差異的視覺外觀(顏色、字型、突顯方式)。

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

步驟 4:執行比較並儲存結果

以下單行程式碼執行所有目標的比較,並寫入一份精緻的結果文件。因為使用 File.Create(),您亦可將串流換成資料庫或雲端儲存目的地。

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

常見問題與解決方法

問題:“找不到檔案”錯誤

請務必確認傳遞給 File.OpenRead(或等效方法)的檔案路徑確實存在且可由執行中的程序存取。

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

問題:大型文件的記憶體問題

使用 using 陳述式即時釋放串流。GroupDocs.Comparison 會分塊處理文件,若不必要地保持串流開啟會導致記憶體使用量激增。

// 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
}

問題:比較結果異常

調整 CompareOptions 中的敏感度設定,忽略如頁首/頁尾變更、頁碼或與審閱無關的中繼資料等元素。

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

非同步比較(適用於 Web 應用程式)

將比較呼叫包在 Task.Run 中,以保持 UI 執行緒的回應性,並避免阻塞 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());
        });
    }
}

效能優化技巧

  • 立即釋放串流(使用 using 區塊)。
  • 盡可能順序處理文件;平行處理可能會增加記憶體負擔。
  • 利用非同步模式 於 Web API 以提升可擴充性。
  • 使用背景工作者排程大型批次,避免限制 Web 伺服器。
  • 保持最新:GroupDocs.Comparison 定期獲得效能提升——升級至最新版本可減少 CPU 與記憶體佔用。

常見問與答

Q: GroupDocs.Comparison 如何處理不同的文件格式?
A: 它支援超過 30 種輸入與輸出格式,包括 DOCX、PDF、PPTX、XLSX 與 HTML,且可比較最高 500 MB 的檔案而不需將全部內容載入記憶體。

Q: 我可以比較版面或結構不同的文件嗎?
A: 可以。引擎以語意方式比較內容,能優雅處理結構變更。

Q: 若文件受密碼保護該怎麼辦?
A: 開啟串流時提供密碼,函式庫會為比較解密該檔案。

Q: 同時比較的文件數量有上限嗎?
A: 實際上限受系統記憶體限制;在一般開發機上,同時比較 5‑10 個大型文件通常沒問題。

Q: 如何將此整合至 CI/CD 流程?
A: 將比較邏輯封裝於主控台應用或 Web API,然後在建置腳本中呼叫,以自動偵測文件變更。

Q: 函式庫是否支援多語言文件?
A: 完全支援。它能處理阿拉伯語、希伯來語等從右至左的語言,以及完整的 Unicode 字元集。

進一步學習的其他資源

  • Documentation – comprehensive API reference and advanced tutorials
  • API reference – detailed method and property docs
  • Download center – latest releases and changelogs
  • Community forums – connect with other developers and get help from GroupDocs experts

Last updated: 2026-10-05
Tested with: GroupDocs.Comparison 25.4.0 for .NET
Author: GroupDocs

相關教學