特集
.NET言語による次世代Officeソリューションの開発

2.VSTOソリューションのメリットと実行の仕組み

デジタルアドバンテージ 一色政彦
2003/12/17

Page1 Page2 Page3 Page4

 VSTOは、Officeドキュメント(Excelワークブック/Wordドキュメント)をフロントエンドにしたOffice Systemソリューションを構築するための開発ツールだ。前述したように、従来からOffice COMアドインを使うことができたが、Office 2003で追加されたVSTOソリューションを使うことで、Office Systemソリューションをマネージ・コード拡張することができる。ここでは、このマネージ・コード拡張によるメリットをもう少し詳しく見ていくことにしよう。

開発言語におけるメリット

 VSTOのメリットの1つは、C#やVB.NETなどの日ごろ使い慣れた開発言語が使用できることだ。しかし、それだけではない。.NET Framework上で開発するので、.NET Frameworkの洗練されたクラス・ライブラリを利用できるという利点もある。これにより、.NET Frameworkで作成されたライブラリをOffice開発にも応用できるようになる。例えば、.NET FrameworkによるWebサービスの利用を簡単に実装したり、自作のクラス・ライブラリを使った特別な演算処理も容易に実装できるだろう。

 このように、VSTOを利用すれば習熟しているVB.NETやC#が使えるため、Office開発に気楽に入っていけると考えられる。ただし、VSTOにおけるC#での開発に関しては弱点がある。VSTOは「VBA」用のCOM APIを.NET言語で利用できるようにマネージ・コードでラップしたもの(これを「PIA:Primary Interop Assembly:プライマリ相互運用アセンブリ」と呼ぶ)を使って(インポートして)開発を行うものである。このため、C#は、VBAの言語仕様に近いVB.NETの場合に比べて、コーディングが非常に面倒になる。具体的にいうと、OfficeのCOM APIではメソッドの「デフォルト引数(省略可能なパラメータ)」を多用しており、VBAやVB.NETでは問題なくデフォルト引数が利用できるが、C#ではデフォルト引数の機能がないため、すべてのパラメータに対して「Type.Missing」を設定する必要があるのだ。次のサンプル・コードは、このメソッドのデフォルト引数におけるVB.NETとC#のコードの比較である。

' VB.NET
Dim excelbook As Excel.Workbook = _
  ThisApplication.Workbooks.Open("C:\YourPath\YourWorkbook.xls");

// C#
Excel.Workbook excelbook =
  ThisApplication.Workbooks.Open(
    @"C:\YourPath\YourWorkbook.xls",
    Type.Missing, Type.Missing, Type.Missing,
    Type.Missing, Type.Missing, Type.Missing,
    Type.Missing, Type.Missing, Type.Missing,
    Type.Missing, Type.Missing, Type.Missing,
    Type.Missing, Type.Missing);
C#とVB.NETのオプション・パラメータの違い
Excelワークブックを開くメソッドを呼び出すときの、C#とVB.NETのパラメータの違い。VB.NETでは、Excelのファイル名だけを指定して、そのほかのパラメータはデフォルト引数を利用して、パラメータを省略できる。一方C#では、デフォルト引数が使えないので、すべてのパラメータに「Type.Missing」を設定する必要がある。このようにC#ではVB.NETよりもコード量が少し増える。

 このようにVSTOには改善すべき点はあるものの、開発言語や既存ライブラリの再利用で大きなメリットがある。だが、VSTOによるメリットはそれだけではない。それよりももっと大きな「.NET Frameworkテクノロジの利用」というメリットがあるのだ。

.NET Frameworkテクノロジのメリット

 .NET Frameworkテクノロジのメリットは大きく2つある。1つが、.NETアセンブリの「自動ダウンロードおよび自動アップデート機能」。もう1つが、.NET Frameworkの「コード・アクセス・セキュリティ(以降、CAS:Code Access Security)によるセキュリティ機能」である。

 「自動ダウンロード/自動アップデート」は、VSTOで作成した.NETアセンブリを、自動的にクライアントにインストールしたり、その.NETアセンブリを自動的にアップデートしたりする機能で、ノータッチ・デプロイメントに近い機能である。これにより、クライアントへの更新プログラムの配布の手間が軽減され、TCOを削減することができる。

 「CASによるセキュリティ機能」では、VSTOで作成したプログラムの実行を制限することができる。これはOfficeを使って悪意のあるコードが実行されるのを防ぐための機能である。これにより、ユーザーの知らないところで、プログラムが実行されるのを防ぐことができる。

 すでに述べたように、これらの.NET Frameworkのテクノロジについては、Windows Server Insiderの記事でも解説している。

VSTOソリューション実行の仕組み

 次にVSTOソリューションが実行される仕組み、つまりVSTOを利用して作成した.NETアセンブリが呼び出される仕組みについて見ておこう。この仕組みは.NETアセンブリ側ではなく、Office ドキュメント側にある。VSTOで扱うOfficeドキュメントでは、カスタム・プロパティとして「_AssemblyLocation0」、「_AssemblyName0」という2つのプロパティが用意され、これらを参照することでVSTOソリューションが実行される。なお、「_AssemblyLocation0」には.NETアセンブリのパスが格納され、「_AssemblyName0」にはアセンブリ名が格納される。このVSTOソリューション実行の流れを次の図に示す。

VSTOで作成した.NETアセンブリが呼び出される仕組み
VSTOソリューションが実行されるときの内部動作。
  ドキュメントをロードするとき、2つのカスタム・プロパティ「_AssemblyLocation0」「_AssemblyName0」が存在するかがチェックされる
  2つのカスタム・プロパティがある場合、ホスト・アプリケーションがアセンブリ・ローダ(Otkloadr.dll。アンマネージDLL)を呼び出す。このアセンブリ・ローダは、VSTOで作成した.NETアセンブリをロードするためのモジュールである
  ローダは、ドキュメントのカスタム プロパティを参照して、VSTOで作成した.NETアセンブリのパスとアセンブリ名を取得する
  取得したパス情報を使って、VSTOで作成した.NETアセンブリを見つけ出し、ホスト・アプリケーションのExcel/Wordにロードする

 VSTOソリューションの実行の流れは次のようになっている。まず、「_AssemblyLocation0」、「_AssemblyName0」の2つのカスタム・プロパティを参照する。これらのプロパティがある場合、VSTOアセンブリ・ローダ(otkloadr.dll。“Visual Studio Tools for Office” Assembly Loader)が呼び出される。このアセンブリ・ローダはVSTOで作成された.NETアセンブリのロードを行う。前述の2つのカスタム・プロパティの値(.NETアセンブリのパスと名前)を参照して、.NETアセンブリの場所を特定し、ホスト・アプリケーションのExcel/Wordにロードする。なお、VSTOで作成した.NETアセンブリは1つだけしかロードできないので、注意していただきたい。


 INDEX
  [特集].NET言語による次世代Officeソリューションの開発
     1.VSTOソリューションとは
   2.VSTOソリューションのメリットと実行の仕組み
     3.VSTOソリューションの開発
     4.VSTOのコードとプログラミング
 


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間