ドキュメント レベルのカスタマイズのアーキテクチャ

Visual Studio 2013 には、Microsoft Office Word および Microsoft Office Excel のドキュメント レベルのカスタマイズを作成するためのプロジェクトが含まれています。 ここでは、ドキュメント レベルのカスタマイズの次の側面について説明します。

カスタマイズについて

Visual Studio の Office 開発ツールを使用してドキュメント レベルのカスタマイズをビルドする場合は、特定の文書に関連付けられたマネージド コード アセンブリを作成します。 アセンブリがリンクされている文書やブックは、マネージド コード拡張機能がある、と言い表されます。 詳細については、「Office ソリューションの設計と作成」を参照してください。

ユーザーがドキュメントを開くと、Microsoft Office アプリケーションによってアセンブリが読み込まれます。 アセンブリが読み込まれると、ドキュメントが開いている間、カスタマイズはイベントに応答できます。 また、ドキュメントが開いている間、カスタマイズはオブジェクト モデルを呼び出し、アプリケーションを自動化して拡張することもできます。.NET Framework 内の任意のクラスを使用することも可能です。

アセンブリは、アプリケーションのプライマリ相互運用機能アセンブリを介してアプリケーションの COM コンポーネントとの通信を行います。 詳細については、「Office プライマリ相互運用機能アセンブリ」と「Office ソリューションの開発の概要 (VSTO)」を参照してください。

複数のドキュメント レベルのカスタマイズを同時に開くと、各アセンブリは異なるアプリケーション ドメインに読み込まれます。 このため、1 つのソリューションが正しく動作しない場合でも、それが原因で他のソリューションにエラーが発生することはありません。 ドキュメント レベルのカスタマイズは、1 つのアプリケーション ドメイン内の 1 つのドキュメントと連携するように設計されています。 ドキュメント間のやり取りに対応するようには設計されていません。 アプリケーション ドメインの詳細については、「アプリケーション ドメイン」を参照してください。

Note

Visual Studio の Office 開発ツールを使用して作成するドキュメント レベルのカスタマイズは、エンド ユーザーがアプリケーションを起動したときのみ使用されることを目的としています。 アプリケーションがプログラムで起動された場合 (オートメーション機能を使用する場合など)、カスタマイズは予期したとおりに動作しないことがあります。

デザイン時と実行時のエクスペリエンス

ドキュメント レベルのカスタマイズのアーキテクチャを理解すると、ソリューションのデザイン時と実行時におけるエクスペリエンスについて理解を深めることができます。

設計時

デザイン時のエクスペリエンスには、次のような手順が含まれます。

  1. 開発者は、ドキュメント レベルのプロジェクトを Visual Studio で作成します。 このプロジェクトには、ドキュメントと、ドキュメントとは分離して実行されるアセンブリが組み込まれます。 ドキュメントは既に存在している (設計者によって作成済み) 場合もあります。また、プロジェクトと共に新しいドキュメントを作成することもできます。

  2. 設計者 (プロジェクトを作成する開発者、または他のユーザーのいずれか) は、エンド ユーザー向けにドキュメントの最終的な外観を仕上げます。

Runtime

実行時のエクスペリエンスには、次のような手順が含まれます。

  1. エンド ユーザーが、マネージド コード拡張機能を実装している文書またはブックを開きます。

  2. 文書またはブックにより、コンパイルされたアセンブリが読み込まれます。

  3. ユーザーが文書またはブックで操作すると、アセンブリがイベントに応答します。

開発者とエンド ユーザーの立場の違い

開発者は主に Visual Studio で作業を行い、エンド ユーザーは Word または Excel で作業を行うため、ドキュメント レベルのカスタマイズを理解するには、次に示す 2 つの視点に立つことが必要です。

開発者の視点 エンド ユーザーの視点
開発者は Visual Studio を使用して、Word および Excel にアクセス可能なコードを記述します。

Word または Excel を実行する実行可能ファイルを作成しているように思えますが、実際の処理は別の方法で行われます。 ドキュメントにはアセンブリが関連付けられており、そのアセンブリへのポインターが含まれています。 ドキュメントを開くと、Word または Excel はアセンブリを検索し、すべてのイベント処理に呼応して動作します。
ソリューションを使用するには、他の Microsoft Office ファイルを開く場合と同様に、文書またはブックを開く (または、テンプレートから新しいドキュメントを作成する) だけです。

アセンブリにより、文書またはブックをカスタマイズできます。たとえば、現在のデータを基に文書やブックを自動生成したり、情報の入力を求めるダイアログ ボックスを表示したりできます。

ドキュメント レベルのカスタマイズでサポートされているドキュメント形式

カスタマイズ プロジェクトを作成するときには、プロジェクト内で使用するドキュメントの形式を選択できます。 詳細については、「方法: Visual Studio で Office プロジェクトを作成する」を参照してください。

Excel および Word のドキュメント レベルのカスタマイズで使用可能なドキュメント形式を、次の表に示します。

Excel Word
Excel ブック (.xlsx)

Excel マクロ有効ブック (.xlsm)

Excel バイナリ ブック (.xlsb)

Excel 97 ~ 2003 のブック (.xls)

Excel テンプレート (.xltx)

Excel マクロ有効テンプレート (.xltm)

Excel 97 ~ 2003 のテンプレート (.xlt)
Word 文書 (.docx)

Word マクロ有効文書 (.docm)

Word 97 ~ 2003 の文書 (.doc)

Word テンプレート (.dotx)

Word マクロ有効テンプレート (.dotm)

Word 97 ~ 2003 のテンプレート (.dot)

サポートされている形式のドキュメントに対してだけ、マネージド コード拡張機能を設計する必要があります。 そうしないと、アプリケーションでドキュメントを開くときに、特定のイベントが発生しない可能性があります。 たとえば、Excel XML スプレッドシート形式または Web ページ (.htm.html) 形式で保存されたブックでマネージド コード拡張機能を使用すると、Open イベントは発生しません。

.xml ファイル名拡張子を持つ Word 文書のサポート

ドキュメント レベルのプロジェクト テンプレートを使用して、次のファイル形式に基づくプロジェクトを作成することはできません。

  • Word XML ドキュメント (*xml)。

  • Word 2003 XML ドキュメント (*xml)。

    エンド ユーザーがこれらのファイル形式でカスタマイズを使用できるようにするには、前の表に示した、サポートされているいずれかのファイル形式に基づくカスタマイズを作成して配置します。 このカスタマイズをインストールすると、エンド ユーザーは文書を Word XML ドキュメント (*xml) 形式または Word 2003 XML ドキュメント (*xml) 形式で保存できます。カスタマイズは、引き続き、予期したとおりに動作します。

カスタマイズのコンポーネント

カスタマイズの主要なコンポーネントは、ドキュメントとアセンブリです。 これらのコンポーネントに加えて、Microsoft Office アプリケーションがカスタマイズを検出して読み込むときに重要な役割を果たすものがあります。

配置マニフェストとアプリケーション マニフェスト

カスタマイズは、配置マニフェストとアプリケーション マニフェストを使用して、最新バージョンのカスタマイズ アセンブリを特定し、読み込みます。 配置マニフェストは、最新のアプリケーション マニフェストを指します。 アプリケーション マニフェストは、カスタマイズ アセンブリを指し、エントリ ポイント クラス (1 つまたは複数のクラス) を指定して、アセンブリ内で実行します。 詳細については、「Office ソリューションでのアプリケーション マニフェストと配置マニフェスト」を参照してください。

Visual Studio Tools for Office ランタイム

Visual Studio の Office Developer Tools を使用して作成した ドキュメント レベルのカスタマイズを実行するには、エンド ユーザーのコンピューター上に Visual Studio Tools for Office ランタイムがインストールされている必要があります。 Visual Studio Tools for Office ランタイム には、カスタマイズ アセンブリを読み込むアンマネージド コンポーネントが含まれています。また、一連のマネージド アセンブリも含まれています。 これらのマネージド アセンブリにより、カスタマイズ コードがホスト アプリケーションを自動化して拡張するために使用するオブジェクト モデルが提供されます。

詳細については、「Visual Studio Tools for Office ランタイムの概要」を参照してください。

カスタマイズと Microsoft Office アプリケーションの連携

ユーザーが Microsoft Office カスタマイズの一部であるドキュメントを開くと、アプリケーションはそのドキュメントにリンクされている配置マニフェストを使用して、最新バージョンのカスタマイズ アセンブリを特定し、読み込みます。 配置マニフェストの場所は、AssemblyLocation というカスタム ドキュメント プロパティに格納されています。 この場所を示す文字列は、ソリューションをビルドするときにプロパティに挿入されます。

配置マニフェストはアプリケーション マニフェストを指し、アプリケーション マニフェストは最新のアセンブリを指します。 詳細については、「Office ソリューションでのアプリケーション マニフェストと配置マニフェスト」を参照してください。

ドキュメント レベルのカスタマイズに関する基本アーキテクチャを、次の図に示します。

2007 Office customization architecture

Note

.NET Framework 4 を対象とする Office ソリューションでは、ソリューションはプライマリ相互運用機能アセンブリ (PIA) を直接呼び出す代わりに、ソリューション アセンブリに埋め込まれた PIA 型情報を使用してホスト アプリケーションのオブジェクト モデルを呼び出します。 詳細については、「Office ソリューションの設計と作成」を参照してください。

読み込みプロセス

ユーザーが Microsoft Office ソリューションの一部であるドキュメントを開くと、次の処理が実行されます。

  1. Microsoft Office アプリケーションはカスタム ドキュメント プロパティをチェックして、そのドキュメントに関連付けられているマネージド コード拡張機能があるかどうかを調べます。 詳細については、「カスタム ドキュメントのプロパティの概要」を参照してください。

  2. マネージド コード拡張機能がある場合は、アプリケーションにより VSTOEE.dll が読み込まれ、これによって VSTOLoader.dll が読み込まれます。 これらは、Visual Studio 2010 Tools for Office ランタイムのローダー コンポーネントであるアンマネージ DLL です。 詳細については、「Visual Studio Tools for Office ランタイムの概要」を参照してください。

  3. VSTOLoader.dll によって .NET Framework が読み込まれ、Visual Studio Tools for Office ランタイムのマネージド部分が開始されます。

  4. ドキュメントがローカル コンピューター以外の場所から開かれている場合、Visual Studio Tools for Office ランタイムは、該当する Office アプリケーション用に設定された [セキュリティ センターの設定] 内の [信頼できる場所] の一覧にドキュメントの場所が載っていることを確認します。 ドキュメントの場所が信頼できる場所でない場合、カスタマイズは信頼されず、読み込みプロセスはここで停止します。

  5. Visual Studio Tools for Office ランタイムは、ソリューションをインストールし (まだインストールされていない場合)、最新のアプリケーションと配置のマニフェストをダウンロードし、一連のセキュリティ チェックを実行します。 詳細については、「Office ソリューションをセキュリティで保護する」を参照してください。

  6. カスタマイズを信頼して実行できる場合、Visual Studio Tools for Office ランタイムでは配置マニフェストとアプリケーション マニフェストを使用して、アセンブリの更新がチェックされます。 利用できる新しいバージョンのアセンブリが存在する場合、ランタイムによってクライアント コンピューターの ClickOnce キャッシュに新しいバージョンのアセンブリがダウンロードされます。 詳細については、「Office ソリューションを配置する」を参照してください。

  7. Visual Studio Tools for Office ランタイムでは、カスタマイズ アセンブリの読み込み先となる新しいアプリケーション ドメインが作成されます。

  8. Visual Studio Tools for Office ランタイムで、カスタマイズ アセンブリがアプリケーション ドメインに読み込まれます。

  9. Visual Studio Tools for Office ランタイムでは、カスタマイズ アセンブリで Startup イベント ハンドラーが呼び出されます。 詳細については、「Office プロジェクトのイベント」を参照してください。