次の方法で共有


Office ソリューションでコードを記述する

Office プロジェクトでのコードの記述には、Visual Studio の他の種類のプロジェクトとは異なるいくつかの側面があります。 これらの違いの多くは、Office オブジェクト モデルがマネージド コードに公開される方法に関連しています。 その他の違いは、Office プロジェクトの設計に関連しています。

適用対象: このトピックの情報は、ドキュメント レベルのプロジェクトと VSTO アドイン プロジェクトに適用されます。 「Office アプリケーションとプロジェクトの種類で使用できる機能」を参照してください。

マネージド コードと Office プログラミング

統合された Microsoft Office ソリューションの作成を可能にする主なテクノロジは、コンポーネント オブジェクト モデル (COM) テクノロジの一部である Automation です。 オートメーションを使用すると、コードを使用して、適切なプログラム インターフェイスをサポートする任意のアプリケーション、DLL、または ActiveX コントロールによって公開されるソフトウェア オブジェクトを作成および制御できます。

プライマリ相互運用アセンブリを理解する

Microsoft Office アプリケーションは、その機能の多くを Automation に公開します。 ただし、マネージド コード (Visual Basic や C#など) を直接使用して Office アプリケーションを自動化することはできません。 マネージド コードを使用して Office アプリケーションを自動化するには、Office プライマリ相互運用機能アセンブリ (PIA) を使用する必要があります。 プライマリ相互運用機能アセンブリを使用すると、マネージド コードで Office アプリケーションの COM ベースのオブジェクト モデルを操作できます。

すべての Microsoft Office アプリケーションには PIA があります。 Visual Studio で Office プロジェクトを作成すると、適切な PIA への参照がプロジェクトに自動的に追加されます。 プロジェクトから他の Office アプリケーションの機能を自動化するには、適切な PIA への参照を手動で追加する必要があります。 詳細については、「 方法: プライマリ相互運用機能アセンブリを使用して Office アプリケーションをターゲットにする」を参照してください。

設計時と実行時にプライマリ相互運用機能アセンブリを使用する

ほとんどの開発タスクを実行するには、開発用コンピューターのグローバル アセンブリ キャッシュに Office PIA がインストールされ、登録されている必要があります。 詳細については、「 Office ソリューションを開発するためのコンピューターの構成」を参照してください。

.NET Framework 4 以降を対象とする Office ソリューションを実行するために、エンド ユーザー コンピューターでは Office PIA は必要ありません。 詳細については、「 Office ソリューションの設計と作成」を参照してください。

プライマリ相互運用機能アセンブリで型を使用する

Office PIA には、Office アプリケーションのオブジェクト モデルを公開する型と、コードで直接使用することを意図していない追加のインフラストラクチャ型の組み合わせが含まれています。 Office PIA の型の概要については、「Office プライマリ相互運用機能アセンブリのクラスとインターフェイスの概要」を参照してください。

Office PIA の型は COM ベースのオブジェクト モデルの型に対応するため、多くの場合、これらの型の使用方法は他のマネージド型とは異なります。 たとえば、Office プライマリ相互運用機能アセンブリで省略可能なパラメーターを持つメソッドを呼び出す方法は、プロジェクトで使用しているプログラミング言語によって異なります。 詳細については、次のトピックを参照してください。

Office プロジェクトのプログラム モデル

すべての Office プロジェクトには、コードのエントリ ポイントを提供する 1 つ以上の生成されたクラスが含まれています。 これらのクラスは、ホスト アプリケーションのオブジェクト モデルへのアクセスや、操作ウィンドウやカスタム作業ウィンドウなどの機能へのアクセスも提供します。

生成されたクラスを理解する

Excel および Word のドキュメント レベルのプロジェクトでは、生成されたクラスはアプリケーションのオブジェクト モデルの最上位オブジェクトに似ています。 たとえば、Word 文書プロジェクトで生成された ThisDocument クラスは、Word オブジェクト モデルの Document クラスと同じメンバーを提供します。 ドキュメント レベルのプロジェクトで生成されるクラスの詳細については、「 ドキュメント レベルのカスタマイズをプログラムする」を参照してください。

VSTO アドイン プロジェクトは、 ThisAddInと呼ばれる生成されたクラスを提供します。 このクラスは、ホスト アプリケーションのオブジェクト モデルのクラスに似ていません。 代わりに、このクラスは VSTO アドイン自体を表し、ホスト アプリケーションのオブジェクト モデルにアクセスしたり、VSTO アドインで使用できる他の機能にアクセスしたりするために使用できるメンバーを提供します。詳細については、「 プログラム VSTO アドイン」を参照してください。

Office プロジェクトで生成されるすべてのクラスには、 Startup イベント ハンドラーと Shutdown イベント ハンドラーが含まれます。 コードの記述を開始するには、通常、これらのイベント ハンドラーにコードを追加します。 VSTO アドインを初期化するには、 Startup イベント ハンドラーにコードを追加します。 VSTO アドインで使用されるリソースをクリーンアップするには、 Shutdown イベント ハンドラーにコードを追加します。 詳細については、「 Office プロジェクトのイベント」を参照してください。

実行時に生成されたクラスにアクセスする

Office ソリューションが読み込まれると、Visual Studio Tools for Office ランタイムによって、プロジェクトで生成された各クラスがインスタンス化されます。 Globals クラスを使用して、プロジェクト内の任意のコードからこれらのオブジェクトにアクセスできます。 たとえば、 Globals クラスを使用して、VSTO アドインのリボン ボタンのイベント ハンドラーから ThisAddIn クラスのコードを呼び出すことができます。

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

Office ソリューションでの名前空間に関する考慮事項

プロジェクトを作成した後で、Office プロジェクトの 既定の名前空間 (または Visual Basic の ルート名前空間 ) を変更することはできません。 既定の名前空間は、プロジェクトの作成時に指定したプロジェクト名と常に一致します。 プロジェクトの名前を変更しても、既定の名前空間は変更されません。 プロジェクトの既定の名前空間の詳細については、「アプリケーション ページ、プロジェクト デザイナー (C#)、およびアプリケーション ページ、プロジェクト デザイナー (Visual Basic)」を参照してください。

C# プロジェクトのホスト項目クラスの名前空間を変更する

ホスト項目クラス ( ThisAddInThisWorkbookThisDocument クラスなど) には、Visual C# Office プロジェクトで独自の名前空間があります。 既定では、プロジェクト内のホスト項目の名前空間は、プロジェクトの作成時に指定したプロジェクト名と一致します。

Visual C# Office プロジェクトのホスト項目の名前空間を変更するには、 ホスト項目の名前空間 プロパティを使用します。 詳細については、「 Office プロジェクトのプロパティ」を参照してください。

Office プロジェクトでサポートされているプログラミング言語

Visual Studio の Office プロジェクト テンプレートでは、Visual Basic および Visual C# プログラミング言語のみがサポートされます。 そのため、これらのプロジェクト テンプレートは、Visual Studio の [新しいプロジェクト] ダイアログ ボックスの Visual Basic ノードと Visual C# ノードでのみ使用できます。 詳細については、「 方法: Visual Studio で Office プロジェクトを作成する」を参照してください。

言語の選択と Office プログラミング

Microsoft Office と Visual Basic for Applications (VBA) は、アプリケーションのカスタマイズのワークフローを最適化するために連携して開発されました。 Visual Basic では、これらの開発の一部が継承されています。 たとえば、Visual Basic では省略可能なパラメーターがサポートされています。つまり、Microsoft Office プライマリ相互運用機能アセンブリで一部のメソッドを呼び出すときに、Visual C# を使用する場合よりも少ないコードを記述できます。

Office ソリューションでの Visual Basic と Visual C# のプログラム

Visual Basic または Visual C# を使用して Office ソリューションを作成できます。 Microsoft Office オブジェクト モデルは Microsoft Visual Basic for Applications (VBA) で使用するように設計されているため、Visual Basic 開発者は、Microsoft Office アプリケーションによって公開されるオブジェクトを快適に操作できます。 Visual C# 開発者は、Visual Basic 開発者と同じ機能のほとんどを使用できますが、Office オブジェクト モデルを使用するために追加のコードを記述する必要がある場合もあります。 また、Office 開発の基本的なプログラミング機能と、Visual Basic と C# で記述されたマネージド コードにもいくつかの違いがあります。

Visual Basic と Visual C の主な違い#

次の表は、Office 開発における Visual Basic と Visual C# の主な違いを示しています。

特徴 Description Visual Basic のサポート Visual C# のサポート
省略可能なパラメーター 多くの Microsoft Office メソッドには、メソッドを呼び出すときに必要ないパラメーターがあります。 パラメーターに値が渡されない場合は、既定値が使用されます。 Visual Basic では、省略可能なパラメーターがサポートされています。 Visual C# では、ほとんどの場合、省略可能なパラメーターがサポートされています。 詳細については、「 Office ソリューションの省略可能なパラメーター」を参照してください。
参照によるパラメーターの受け渡し ほとんどの Microsoft Office プライマリ相互運用機能アセンブリの省略可能なパラメーターは、値で渡すことができます。 ただし、一部のプライマリ相互運用アセンブリでは、参照型を受け入れる省略可能なパラメーターを参照渡しする必要があります。

値パラメーターと参照型パラメーターの詳細については、「 引数を値渡しおよび参照渡しで渡す (Visual Basic の場合) 」および「 パラメーターを渡す (C# プログラミング ガイド)」を参照してください。
パラメーターを参照渡しするために追加の作業は必要ありません。 Visual Basic コンパイラは、必要に応じて、パラメーターを参照によって自動的に渡します。 ほとんどの場合、Visual C# コンパイラは、必要に応じてパラメーターを参照渡しします。 詳細については、「 Office ソリューションの省略可能なパラメーター」を参照してください。
パラメーター化されたプロパティ 一部のプロパティはパラメーターを受け取り、読み取り専用関数として機能します。 Visual Basic では、パラメーターを受け取るプロパティがサポートされています。 Visual C# では、パラメーターを受け取るプロパティがサポートされています。
遅延バインディング 遅延バインディングでは、デザイン時に変数をオブジェクト型にキャストするのではなく、実行時にオブジェクトのプロパティを決定する必要があります。 Option Strict がオフの場合、Visual Basic は遅延バインディングを実行します。 Option Strict がオンの場合、遅延バインディング メンバーにアクセスするには、オブジェクトを明示的に変換し、System.Reflection名前空間の型を使用する必要があります。 詳細については、「 Office ソリューションの遅延バインディング」を参照してください。 Visual C# は、.NET Framework 4 を対象とするプロジェクトで遅延バインディングを実行します。 詳細については、「 Office ソリューションの遅延バインディング」を参照してください。

Office 開発とマネージド コードの主な違い

次の表は、Visual Basic または Visual C# で記述された Office 開発とマネージド コードの主な違いを示しています。

特徴 Description Visual Basic と Visual C# のサポート
配列インデックス Microsoft Office アプリケーションのコレクションの下位の配列境界は 1 から始まります。 Visual Basic と Visual C# では、0 ベースの配列が使用されます。 詳細については、Visual Basic の 配列 (C# プログラミング ガイド)配列を参照してください。 Microsoft Office アプリケーションのオブジェクト モデル内のコレクションの最初の項目にアクセスするには、0 ではなくインデックス 1 を使用します。