文件比較 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