ドキュメント比較 C# チュートリアル – 複数の Word ドキュメントをプログラムで比較する

複数の Word ドキュメント を迅速かつ正確に比較する必要がある場合、このチュートリアルでは GroupDocs.Comparison for .NET を使用してその方法を正確に示します。契約書のレビュー、改訂の追跡、複数の著者からのドラフトの統合など、比較を自動化することで手作業の行単位チェックを排除し、人的エラーを減らし、すべての挿入、削除、変更をハイライトした単一の洗練されたレポートを生成します。

このガイドで習得できること:

  • ストリームから Word ファイルを読み込む(データベース保存またはクラウドファイルに最適)
  • 新しい C# プロジェクトで GroupDocs.Comparison を設定する
  • 挿入、削除、変更されたテキストのビジュアルスタイルをカスタマイズする
  • 一度の実行で 任意の数 のターゲットドキュメントを比較する
  • 一般的な落とし穴のトラブルシューティングと大容量ファイルのパフォーマンス調整
  • 自動比較が手作業の時間を何時間も節約する実際のシナリオ

クイック回答

  • どのライブラリを使用すべきですか? GroupDocs.Comparison for .NET。
  • 複数の Word ドキュメントを同時に比較できますか? はい – 必要なだけターゲットストリームを追加できます。
  • Word で差分をハイライトするにはどうすればよいですか? カスタム StyleSettings を使用して CompareOptions を構成します。
  • 開発にライセンスは必要ですか? 学習用の無料トライアルが利用可能です;デモ用の一時ライセンスで透かしを除去できます。
  • 非同期サポートは利用可能ですか? はい – Task.Run で比較をラップして非ブロッキング実行にします。

なぜ複数の Word ドキュメントを比較するのか?

すべてのバージョンにわたるすべての変更を 単一の統合ビュー として取得でき、別々のサイドバイサイドレポートを切り替える必要がなくなります。これは、複数のレビュアーが同じ契約書を編集する場合や、複数の提案ドラフトを監査する必要がある場合、またはすべての修正を記録したマスタードキュメントを生成したい場合に重要です。差分を1つの出力に統合することで、ステークホルダーは複数のファイルを開かずに、追加、削除、変更された内容を即座に確認できます。

Word ドキュメントで差分をハイライトする方法

ソースファイルを読み込み、各ターゲットを追加し、InsertedItemStyle、DeletedItemStyle、ModifiedItemStyle を指定する CompareOptions を適用します。結果として、挿入は黄色、削除は赤の取り消し線、変更は青の下線で表示され、組織のブランディングガイドラインに合わせた Word ファイルが生成されます。

直接的な回答

GroupDocs.Comparison は CompareOptions を介してビジュアルスタイルを設定できます。挿入、削除、変更されたコンテンツの色、フォント、ハイライトタイプを定義し、エンジンがそれらのスタイルを直接出力 Word ドキュメントにレンダリングします。この単一の設定ステップにより、レビュー担当者にとって差分が一目で分かるようになります。

前提条件

  • GroupDocs.Comparison ライブラリ (v25.4.0 以降) – .NET Framework 4.6.1+、.NET Core 2.0+、.NET 5/6/7 と互換性があります。
  • Visual Studio(任意の最新エディション)または同等の C# IDE。
  • C# コンソールアプリケーションの基本的な知識。
  • 実験用のサンプル .docx ファイルが 1 つ以上。

GroupDocs.Comparison のセットアップと実行

ライブラリのインストール(簡単な方法)

オプション 1: パッケージ マネージャ コンソール

Install-Package GroupDocs.Comparison -Version 25.4.0

オプション 2: .NET CLI(私のお気に入り)

dotnet add package GroupDocs.Comparison --version 25.4.0

ライセンスの簡単な取得方法

  • Free trial: 完全な機能を小さな透かしと共に提供—学習に最適です。
  • Temporary license: デモ用の透かしを除去します;GroupDocs から無料キーをリクエストしてください。
  • Production license: 完全ライセンスは 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 はファイルパスではなく ストリーム でインスタンス化され、データベースに保存されたドキュメントやネットワーク経由で受信したドキュメントを扱う柔軟性を提供します。

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 はすべての差分をインテリジェントにマージし、1 つの結果ファイルにまとめます。

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: 比較を実行し結果を保存する

以下の 1 行で、すべてのターゲットに対して比較を実行し、洗練された結果ドキュメントを書き込みます。File.Create() を使用しているため、ストリームをデータベースやクラウドストレージの宛先に置き換えることも可能です。

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

一般的な問題と解決方法

問題: “File not found” エラー

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

最終更新日: 2026-10-05
テスト環境: GroupDocs.Comparison 25.4.0 for .NET
作者: GroupDocs

関連チュートリアル