次の方法で共有


ドキュメント レベルのカスタマイズのプログラミング

ドキュメント レベルのカスタマイズを使用して Microsoft Office Word または Microsoft Office Excel を拡張するときには、以下のタスクを実行できます。

  • オブジェクト モデルを使用することでアプリケーションを自動化する。

  • ドキュメントにコントロールを追加する。

  • ドキュメント内の Visual Basic for Applications (VBA) コードをカスタマイズ アセンブリから呼び出す。

  • カスタマイズ アセンブリのコードを VBA から呼び出す。

  • Microsoft Office がインストールされていないサーバー上でドキュメントの特定部分を管理する。

  • アプリケーションのユーザー インターフェイス (UI: User Interface) をカスタマイズする。

対象: このトピックの情報は、Excel 2013 と Excel 2010、および Word 2013 と Word 2010 のドキュメント レベルのプロジェクトに適用されます。詳細については、「Office アプリケーションおよびプロジェクト タイプ別の使用可能な機能」を参照してください。

ドキュメント レベルのプロジェクトのコードの記述には、Visual Studio の他のプロジェクトの種類とは異なる点があります。相違点の多くは、Office オブジェクト モデルがマネージ コードに公開される方法によって生じます。詳細については、「Office ソリューションのコードの記述」を参照してください。

ドキュメント レベルのカスタマイズおよび Visual Studio の Office 開発ツールで作成できる他のソリューションの種類の概要については、「Office ソリューションの開発の概要」を参照してください。

ドキュメント レベルのプロジェクトで生成されたクラスの使用

ドキュメント レベルのプロジェクトを作成すると、Visual Studio によって、コードの記述に使用できるクラスがプロジェクト内に自動的に生成されます。Word と Excel では Visual Studio が生成するクラスが異なります。

  • Word のドキュメント レベルのプロジェクトでは、生成されるクラスの既定の名前は ThisDocument です。

  • Excel のドキュメント レベルのプロジェクトでは、ブックについて 1 つ、各ワークシートについて 1 つずつクラスが生成されます。既定では、それらのクラスの名前は次のようになります。

    • ThisWorkbook

    • Sheet1

    • Sheet2

    • Sheet3

生成されるクラスには、ドキュメントを開いたとき、または閉じたときに呼び出されるイベント ハンドラーが含まれています。ドキュメントを開くときにコードを実行するには、Startup イベント ハンドラーにコードを追加します。ドキュメントを閉じる直前にコードを実行するには、Shutdown イベント ハンドラーにコードを追加します。詳細については、「Office プロジェクトのイベント」を参照してください。

Bb386206.collapse_all(ja-jp,VS.110).gif生成されたクラスのデザインについて

.NET Framework 4 か .NET Framework 4.5を対象とするプロジェクトでは、ホスト項目は Visual Studio Tools for Office Runtime がインターフェイス型であるため、生成されたクラスでは実装を派生できません。代わりに、生成されたクラスでは、ほとんどのメンバーが次の基本クラスから派生します。

これらの基本クラスでは、メンバーへのすべての呼び出しは Visual Studio Tools for Office Runtime の対応するホスト項目インターフェイスの内部実装にリダイレクトされます。たとえば、ThisDocument クラスの Protect のメソッドを呼び出すと、Microsoft.Office.Tools.Word.DocumentBase のクラスは Visual Studio Tools for Office Runtimeの Microsoft.Office.Tools.Word.Document のインターフェイスの内部実装にこの呼び出しをリダイレクトします。

ホスト アプリケーションのオブジェクト モデルへのアクセス

ホスト アプリケーションのオブジェクト モデルにアクセスするには、プロジェクト内に生成されるクラスのメンバーを使用します。これらのクラスは、それぞれが Excel または Word のオブジェクト モデルのオブジェクトに対応し、用意されているプロパティ、メソッド、およびイベントはほとんど同じです。たとえば、Word 用のドキュメント レベルのプロジェクトの ThisDocument クラスは、Word オブジェクト モデルの Microsoft.Office.Interop.Word.Document オブジェクトとほとんど同じメンバーを提供します。

次のコード例は、Word オブジェクト モデルを使用して Word 用のドキュメント レベルのカスタマイズに含まれるドキュメントを保存する方法を示しています。このコードは ThisDocument クラスから実行することを前提としています。

Me.Save()
this.Save();

同じ操作を ThisDocument クラスの外側から実行するには、Globals オブジェクトを使用して ThisDocument クラスにアクセスします。たとえば、操作ウィンドウの UI に [保存] ボタンを含める場合は、このコードを操作ウィンドウのコードに追加します。

Globals.ThisDocument.Save()
Globals.ThisDocument.Save();

ThisDocument クラスは Microsoft.Office.Tools.Word.Document ホスト項目からほとんどのメンバーを取得するため、このコードで呼び出される Save メソッドは、実際は Microsoft.Office.Tools.Word.Document ホスト項目の Save メソッドです。このメソッドは、Word オブジェクト モデルの Microsoft.Office.Interop.Word.Document オブジェクトの Save メソッドに対応します。

Word および Excel のオブジェクト モデルの詳細については、「Word オブジェクト モデルの概要」および「Excel オブジェクト モデルの概要」を参照してください。

Globals オブジェクトの詳細については、「Office プロジェクト内のオブジェクトへのグローバル アクセス」を参照してください。

ドキュメントへのコントロールの追加

ドキュメントの UI をカスタマイズするには、Windows フォーム コントロールまたはホスト コントロールをドキュメントに追加します。さまざまな種類のコントロールを組み合わせ、コードを記述することによって、コントロールのデータへのバインド、ユーザー情報の収集、およびユーザーの操作への応答を実行できます。

ホスト コントロールは、Word および Excel のオブジェクト モデルに属する一部のオブジェクトを拡張するクラスです。たとえば、Microsoft.Office.Tools.Excel.ListObject ホスト コントロールには、Excel の Microsoft.Office.Interop.Excel.ListObject の機能がすべて用意されています。ただし、Microsoft.Office.Tools.Excel.ListObject ホスト コントロールには追加のイベントやデータ バインディング機能も含まれています。

詳細については、「ホスト項目とホスト コントロールの概要」および「Office ドキュメントでの Windows フォーム コントロールの概要」を参照してください。

VBA とドキュメント レベルのカスタマイズの結合

ドキュメント レベルのカスタマイズに含まれるドキュメントで VBA コードを使用することができます。ドキュメント内の VBA コードをカスタマイズ アセンブリから呼び出すことができ、ドキュメント内の VBA コードによってカスタマイズ アセンブリ内のコードを呼び出すことができるようにプロジェクトを構成することも可能です。

詳細については、「VBA とドキュメント レベルのカスタマイズの結合」を参照してください。

サーバー上のドキュメントの管理

Microsoft Office Word または Microsoft Office Excel がインストールされていないサーバー上にあるドキュメント レベルのカスタマイズに対し、さまざまな管理タスクを行うことができます。たとえば、ドキュメントのデータ キャッシュにあるデータへのアクセスおよび変更も可能です。ドキュメントに関連付けられているカスタマイズ アセンブリを管理することもできます。たとえば、アセンブリをプログラムによってドキュメントから削除してカスタマイズ コードが実行されないようにしたり、アセンブリをプログラムによってドキュメントにアタッチしたりすることができます。

詳細については、「ServerDocument クラスによるサーバー上のドキュメントの管理」を参照してください。

Microsoft Office アプリケーションのユーザー インターフェイスのカスタマイズ

ドキュメント レベルのカスタマイズを使用することにより、次の方法で Word および Excel の UI をカスタマイズできます。

Microsoft Office アプリケーションの UI をカスタマイズする方法の詳細については、「Office UI のカスタマイズ」を参照してください。

ドキュメント レベルのカスタマイズのネイティブな Office オブジェクトからオブジェクトを拡張します。

Office イベントのイベント ハンドラーの多くは、イベントを発生させたブック、ワークシート、または文書を表すネイティブな Office オブジェクトを受け取ります。場合によっては、ドキュメント レベルのカスタマイズでブックや文書がイベントを発生させたときにのみ、コードを実行することができます。たとえば、Excel のドキュメント レベルのカスタマイズで、ユーザーがカスタマイズされたブック内のいずれかのワークシートをアクティブにしたときにはコードを実行し、同時に開いている他のブック内のワークシートをアクティブにしたときにはコードを実行しないようにすることができます。

ネイティブな Office オブジェクトがある場合、そのオブジェクトがドキュメント レベルのカスタマイズでホスト項目またはホスト コントロールに拡張されているかどうかをテストできます。ホスト項目とホスト コントロールは、Visual Studio Tools for Office Runtime に用意された型で、Word または Excel のオブジェクト モデルにネイティブに存在するオブジェクト (ネイティブな Office オブジェクトと呼ばれます) に対して機能を追加します。総称して、ホスト項目とホスト コントロールは、拡張 オブジェクトとも呼ばれます。ホスト項目とホスト コントロールの詳細については、ホスト項目とホスト コントロールの概要を参照してください。

GetVstoObject メソッドと HasVstoObject メソッドについて

ネイティブ Office オブジェクトをテストするには、プロジェクトで HasVstoObject メソッドおよび GetVstoObject メソッドを使用します。

  • ネイティブな Office オブジェクトがカスタマイズに拡張オブジェクトを保有しているかどうかを確認する場合には、HasVstoObject メソッドを使用します。このメソッドは、ネイティブな Office オブジェクトに拡張オブジェクトがある場合は true を返し、それ以外の場合は false を返します。

  • ネイティブな Office オブジェクトの拡張オブジェクトを取得する場合は、GetVstoObject メソッドを使用します。このメソッドは、指定したネイティブな Office オブジェクトに拡張オブジェクトがある場合は Microsoft.Office.Tools.Excel.ListObjectMicrosoft.Office.Tools.Excel.WorkbookMicrosoft.Office.Tools.Excel.WorksheetMicrosoft.Office.Tools.Word.Document のいずれかのオブジェクトを返します。それ以外の場合、GetVstoObject は null を返します。たとえば、指定した Microsoft.Office.Interop.Word.Document が Word 文書プロジェクトの文書の基になるオブジェクトである場合、GetVstoObject メソッドは Microsoft.Office.Tools.Word.Document を返します。

ドキュメント レベルのプロジェクトでは、GetVstoObject メソッドを使用して実行時に新しいホスト項目 (Microsoft.Office.Tools.Excel.WorkbookMicrosoft.Office.Tools.Excel.Worksheet、または Microsoft.Office.Tools.Word.Document) を作成することはできません。このメソッドを使用できるのは、デザイン時にプロジェクトで生成した既存のホスト項目にアクセスするときだけです。実行時に新しいホスト項目を作成するには、アプリケーション レベルのプロジェクトを開発する必要があります。詳細については、「ホスト項目およびホスト コントロールのプログラム上の制限事項」および「アプリケーション レベルのアドインにおける実行時の Word 文書や Excel ブックの拡張」を参照してください。

GetVstoObject メソッドと HasVstoObject メソッドの使用

HasVstoObjectGetVstoObject のメソッドを Globals.Factory.GetVstoObject、または Globals.Factory.HasVstoObject のメソッドを呼び出すには使用し、(Microsoft.Office.Interop.Word.DocumentMicrosoft.Office.Interop.Excel.Worksheetなど) では、ネイティブな Word オブジェクトまたは Excel オブジェクトを渡しますにテストする場合。

参照

概念

ServerDocument クラスによるサーバー上のドキュメントの管理

Office ソリューションのコードの記述

その他の技術情報

Office ドキュメントのコントロール

VBA とドキュメント レベルのカスタマイズの結合