ドキュメント比較 C# チュートリアル – 複数の Word ドキュメントをプログラムで比較する
Word ドキュメントを手作業で行ごとに比較し、すべての変更を見逃さないようにしたことはありませんか? あなただけではありません。このガイドでは、複数の Word ドキュメントを効率的に比較する方法を学びます。法的契約書のレビュー、改訂の追跡、共同編集プロジェクトの管理など、さまざまなシーンで活用できます。GroupDocs.Comparison for .NET を使用してプロセスを自動化すれば、時間を節約し、エラーを減らし、数行の C# コードでプロフェッショナルな比較レポートを生成できます。
このチュートリアルで習得できること:
- ストリームを使用して Word ドキュメントを比較する方法(データベースに保存されたファイルに最適)
- C# プロジェクトで GroupDocs.Comparison をゼロから設定する方法
- プロフェッショナルなスタイリングで比較結果をカスタマイズする方法
- 複数ドキュメントの比較を効率的に処理する方法
- 一般的な問題のトラブルシューティングとパフォーマンス最適化
- 実務での活用例(手作業の時間を何時間も削減)
クイック回答
- 使用すべきライブラリは何ですか? GroupDocs.Comparison for .NET
- 複数の Word ドキュメントを同時に比較できますか? はい – 必要なだけターゲットストリームを追加できます。
- Word で差分をハイライトするには? カスタム
StyleSettingsを使用したCompareOptionsを利用します。 - 開発にライセンスは必要ですか? 無料トライアルで学習可能です。テンポラリ ライセンスで透かしを除去できます。
- 非同期サポートは利用可能ですか? はい –
Task.Runで比較をラップすればブロッキングしません。
なぜ複数の Word ドキュメントを比較するのか?
同時に 2 つ以上のバージョンを比較すると、すべての変更を一つの統合ビューで把握できます。複数のレビュアーが同一契約書を編集したり、複数の提案書ドラフトを監査する必要がある場合に特に有用です。別々の比較レポートを扱う代わりに、GroupDocs.Comparison はすべての差分を 1 つのドキュメントに統合し、追加・削除・変更を簡単に見つけられます。
Word ドキュメントで差分をハイライトする方法
GroupDocs.Comparison を使用すると、挿入、削除、変更されたテキストに対してカスタムスタイルを定義できます。InsertedItemStyle、DeletedItemStyle、ModifiedItemStyle を設定することで、レポートを組織のブランディングに合わせたり、可読性を向上させたりできます。ここでは、挿入テキストを黄色でハイライトする基本例を紹介します。
前提条件
- GroupDocs.Comparison ライブラリ (v25.4.0 以降) – .NET Framework 4.6.1+ および .NET Core 2.0+ に対応
- Visual Studio(任意の最新バージョン)
- 基本的な C# の知識 – コンソールアプリの作成に慣れていること
- 比較テスト用のサンプル Word ファイルを数個用意すること
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 スタイル)
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.");
}
}
}
}
このスニペットは Comparer オブジェクトを作成し、ソースドキュメントを読み込み、単一のターゲットドキュメントを追加します。いわば「ビフォーアフター」比較を設定するイメージです。
完全実装 – ステップバイステップ
ステップ 1: 基盤の設定
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
}
何が起きているのか? ファイルパスではなく ストリーム で Comparer をインスタンス化します。これにより、データベースに保存されたドキュメントやネットワーク経由で受信したドキュメントを柔軟に扱えます。
ステップ 2: 複数のターゲットドキュメントを追加
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")));
これで、単一の実行で 複数の Word ドキュメントを比較 できます。GroupDocs.Comparison はすべての差分を賢く 1 つの結果ファイルに統合します。
ステップ 3: 差分を際立たせる(カスタムスタイリング)
CompareOptions compareOptions = new CompareOptions()
{
InsertedItemStyle = new StyleSettings()
{
FontColor = System.Drawing.Color.Yellow // Highlight inserted text in yellow
}
};
カスタムスタイリングにより Word で差分がハイライト され、ステークホルダーにとってレポートの可読性が向上します。
ステップ 4: 比較の実行と結果の保存
string outputDirectory = "YOUR_OUTPUT_DIRECTORY";
string outputFileName = System.IO.Path.Combine(outputDirectory, "RESULT_WORD.docx");
comparer.Compare(File.Create(outputFileName), compareOptions);
上記の一行で全ターゲットに対する比較が実行され、洗練された結果ドキュメントが書き込まれます。File.Create() を使用しているため、ストリームはデータベースやクラウドストレージの宛先に置き換えることも可能です。
よくある問題と解決策
問題: “File Not Found” エラー
string sourcePath = System.IO.Path.Combine(documentDirectory, "SOURCE_WORD.docx");
if (!File.Exists(sourcePath))
{
throw new FileNotFoundException($"Source document not found: {sourcePath}");
}
ストリームを開く前に必ずパスを確認してください。
問題: 大容量ドキュメントでのメモリ問題
// 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 options = new CompareOptions()
{
CompareBookmarks = false, // Ignore bookmark differences
CompareComments = false, // Ignore comment differences
CompareFields = false // Ignore field differences
};
レビューに不要な要素を無視するよう感度設定を調整してください。
Web アプリ向け非同期比較
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());
});
}
}
UI スレッドの応答性を保つため、比較処理を Task.Run でラップしてください。
パフォーマンス最適化のヒント
- 常にストリームを破棄する(
using文)。 - 可能な限りドキュメントを順次処理する。
- Web API では非同期パターンを検討する。
- 高負荷シナリオではキューでスケールする。
- ライブラリを最新に保ち、パフォーマンス向上の恩恵を受ける。
よくある質問
Q: GroupDocs.Comparison は異なるドキュメント形式をどのように扱いますか?
A: Word、PDF、Excel、PowerPoint など多数に対応しています。API はフォーマット間で一貫しているため、同じコードで PDF や DOCX なども扱えます。
Q: 異なるレイアウトや構造のドキュメントを比較できますか?
A: はい。エンジンは文字単位ではなく意味的にコンテンツを比較するため、構造的な変更もスムーズに処理されます。
Q: ドキュメントがパスワードで保護されている場合はどうすればよいですか?
A: ストリームを開く際にパスワードを渡すことで、ライブラリがファイルを復号し比較できます。
Q: 一度に比較できるドキュメント数に制限はありますか?
A: 実質的な制限はシステムメモリです。一般的な開発マシンでは、5〜10 件の大容量ドキュメントの比較が問題なく行えます。
Q: CI/CD パイプラインに組み込むには?
A: 比較ロジックをコンソールアプリまたは Web API にラップし、ビルドスクリプトから呼び出すことで、ドキュメントの変更を自動検出できます。
Q: ライブラリは多言語ドキュメントに対応していますか?
A: 完全に対応しています。アラビア語やヘブライ語などの右から左への言語や、Unicode 文字も扱えます。
さらに学ぶための追加リソース
- Documentation – 包括的な API リファレンスと高度なチュートリアル
- API Reference – 詳細なメソッドとプロパティのドキュメント
- Download Center – 最新リリースと変更履歴
- Community Forums – 他の開発者と交流し、GroupDocs エキスパートから支援を受けられます
最終更新日: 2026-04-14
テスト環境: GroupDocs.Comparison 25.4.0 for .NET
作者: GroupDocs