C#でストリームを使用してXLSXファイルを比較する方法 – 完全ガイド
Excelスプレッドシートを手動で比較するのは手間がかかり、エラーが発生しやすいです。特に大規模な財務レポートや監査データセットの検証が必要な場合はなおさらです。このチュートリアルでは、GroupDocs.Comparison for .NET を使用したストリームベースの処理で how to compare xlsx ファイルを効率的に比較する方法を紹介します。すべての手順を順に解説し、ストリームが重要な理由を説明し、実際のプロジェクトにすぐに取り入れられる実用的なヒントを提供します。
クイック回答
- Excel比較を処理するライブラリは何ですか? GroupDocs.Comparison for .NET.
- ファイルをディスクに保存せずに比較できますか? はい — ストリームを使用してインメモリデータで直接作業できます。
- 本番環境でライセンスは必要ですか? 商用ライセンスが必須です;無料トライアルが利用可能です。
- サポートされている .NET バージョンは何ですか? .NET Framework 4.5+, .NET Core 3.1+, .NET 5/6/7.
- 対応している Excel フォーマットは何種類ですか? 20 種類以上、.xls、.xlsx、.xlsm、.csv などを含みます。
“how to compare xlsx” とは?
“How to compare xlsx” は、2つの Excel ワークブックファイル間の差分をプログラムで検出することを指します。GroupDocs.Comparison for .NET は各ワークブックを読み取り、セルレベルの変更を評価し、挿入、削除、変更を示すハイライトされた結果ドキュメントを生成します。比較は変更されたセル、行、シートをハイライトし、一目で差分を確認できるようにします。
ストリームベースの比較を使用する理由
ストリーム処理は、ファイル全体を RAM にロードするのではなく、チャンク単位で読み込むことでメモリ負荷を軽減します。GroupDocs.Comparison は 50 + の入力および出力フォーマット に対応し、数百ページに及ぶスプレッドシート を処理しながら、典型的なサーバーハードウェア上でピークメモリ使用量を 100 MB 未満に抑えます。これにより、Web サービス、マイクロサービス、オンプレミスのバッチジョブに最適です。
前提条件
- GroupDocs.Comparison for .NET – 公式サイトからダウンロードしてください here。
- C# 開発環境 – Visual Studio 2022 または .NET 6+ をサポートする任意の IDE。
- Excel ファイル – 比較したい 2 つの
.xlsxワークブック。 - ストリームの基本的な理解 –
System.IO.Streamの概念は例全体で使用されています。
名前空間のインポート
以下の名前空間をインポートすると、比較エンジンとストリームユーティリティにアクセスできます。
GroupDocs.Comparison 名前空間にはコア比較クラスが含まれ、System.IO はストリーム処理に必要な FileStream と MemoryStream 型を提供します。
ステップバイステップ実装ガイド
ストリーム使用がパフォーマンスに与える影響は?
File.OpenRead() で各ワークブックを読み込み、得られたストリームを直接比較器に渡します。このアプローチにより一時ファイルを回避し、SSD ストレージ上で I/O 時間を最大 30 % 短縮し、プロセスを完全にメモリ内で実行できるため、高スループットの Web API にとって重要です。
手順 1: 出力変数の初期化
比較結果の保存先を定義します。Path.Combine() を使用すると、Windows、Linux、macOS のいずれでも正しいディレクトリ区切り文字が保証されます。
Pro Tip: 本番環境では、出力を一時フォルダーまたはクラウドストレージバケットに書き込んで、アプリケーションディレクトリを整理してください。
手順 2: Comparer オブジェクトの作成
Comparer クラスは、2 つ以上のドキュメントの比較を調整する中心コンポーネントです。
File.OpenRead() でソースワークブックを開き、Comparer インスタンスを作成します。using ステートメントにより、ファイルストリームが自動的に閉じられ、ファイルハンドルのリークを防止します。
手順 3: ターゲットドキュメントの追加
2 番目のワークブックを comparer に追加します。マスターファイルを複数のバリアントと比較する必要がある場合は、追加のターゲットをチェーンできます。これは地域別レポートやバージョン管理シナリオで便利です。
手順 4: 比較の実行
Compare メソッドを呼び出して差分ドキュメントを生成します。結果は File.Create() で作成された新しいストリームに書き込まれます。出力ファイルは変更されたすべてのセル、行、シートをハイライトし、視覚的なレビューを簡単にします。
Compare メソッドは比較を実行し、結果ドキュメントをストリームとして返します。
手順 5: 成功メッセージの表示
比較が完了したら、出力パスを含む簡潔な成功メッセージをログに記録します。実際の API では、ストリームを呼び出し元に返すか、後で取得できるようにクラウドストレージに保存します。
よくある問題とトラブルシューティング
- File‑in‑use エラー: 他のプロセス(Excel を含む)がファイルを開いていないことを確認してください。
File.OpenRead()で開かれたストリームは読み取り専用の共有ロックを取得し、ほとんどの競合を緩和します。 - 巨大ファイルでのメモリスパイク: 100 MB を超えるワークブックの場合、
ComparerOptionsのEnableMemoryOptimizationフラグ(利用可能な場合)を有効にし、プロセスのプライベートメモリを監視してください。 - 混在フォーマットの比較: GroupDocs.Comparison は一貫したフォーマットのペアをサポートします。同一操作で
.xlsファイルと.xlsxファイルを比較しないようにし、レイアウトの不一致を防止してください。 - ストリームの位置: ストリームを再利用する場合は、Comparer に渡す前に必ず
stream.Seek(0, SeekOrigin.Begin)で位置をリセットしてください。
堅牢なエラーハンドリング: 破損したワークブックに対しては ComparisonException を捕捉し、後で調査できるようにファイル名をログに記録します。ComparisonException は、入力ドキュメントが破損しているかサポートされていない形式の場合に GroupDocs.Comparison からスローされます。
パフォーマンスとベストプラクティス
- ストリームは速やかに破棄: すべての
FileStreamをusingブロックでラップしてください。 - バッチ処理:
Parallel.ForEachと非同期 comparer を使用して複数のファイルペアを同時に処理しますが、CPU の過負荷を防ぐために並列度を上限設定してください。 - 堅牢なエラーハンドリング: 破損したワークブックに対しては
ComparisonExceptionを捕捉し、後で調査できるようにファイル名をログに記録します。 - 入力ストリームの検証: 比較前に MIME タイプまたはファイルヘッダーを確認し、Excel 以外のアップロードを早期に拒否してください。
ComparerOptions は、メモリ最適化や感度コントロールなど、比較プロセスの設定を提供します。
高度な使用シナリオ
- データベース BLOB 比較: SQL Server から Excel BLOB を取得し、
MemoryStreamでラップして comparer に直接渡します — 一時ファイルは不要です。 - クラウドストレージ統合: Azure Blob Storage SDK を使用して
BlobStreamを取得し、comparer に渡すことで、完全にサーバーレスなワークフローを実現します。 - リアルタイム API エンドポイント: 2 つの multipart/form‑data ファイルを受け取る POST エンドポイントを公開し、即座に比較して差分をダウンロード可能なストリームとして返します。
結論
GroupDocs.Comparison のストリームベース API を活用することで、C# で XLSX ファイルを比較する際に メモリ効率が高く、安全、スケーラブル な方法を手に入れられます。このガイドでは、セットアップから高度なクラウドシナリオまでを網羅し、スプレッドシート比較を任意の .NET ソリューションに統合するための確固たる基盤を提供します。
よくある質問
Q: GroupDocs.Comparison for .NET はすべての Excel フォーマットに対応していますか?
A: はい、.xls、.xlsx、.xlsm、.csv など、20 種類以上の Excel 関連フォーマットをサポートしており、レガシーおよび最新のワークブック間で広範な互換性を確保します。
Q: 比較結果のビジュアルスタイルをカスタマイズできますか?
A: もちろんです。API を使用すると、ハイライト色の設定、枠線スタイルの変更、ComparisonOptions を通じて変更感度のレベルを調整できます。
Q: 本番環境で使用するには商用ライセンスが必要ですか?
A: 商用展開には有効な GroupDocs.Comparison ライセンスが必要です。ライセンスは here から取得できます。
Q: 無料トライアルは利用可能ですか?
A: はい、すべての機能を評価できる完全機能のトライアルを here からダウンロードできます。
Q: コミュニティサポートはどこで得られますか?
A: GroupDocs.Comparison フォーラム here は、質問や他の開発者とのソリューション共有が活発に行われている場所です。
最終更新日: 2026-06-21
テスト環境: GroupDocs.Comparison 23.10 for .NET
作者: GroupDocs
using System;
using System.IO;
string outputDirectory = "Your Document Directory";
string outputFileName = Path.Combine(outputDirectory, "result.xlsx");
using (Comparer comparer = new Comparer(File.OpenRead("source.xlsx")))
comparer.Add(File.OpenRead("target.xlsx"));
comparer.Compare(File.Create(outputFileName));
Console.WriteLine($"\nDocuments compared successfully.\nCheck output in {outputDirectory}.");