アプリケーションの作成 1
だいぶ前置きが長くなりましたが、ここからは実際にサンプルのアプリケーションを作成する過程を通してVSTOの機能を見ていきます。
ドキュメントレベルのカスタマイズアプリケーションの作成
ドキュメントレベルのカスタマイズアプリケーションを作成するには、VS2008の新規プロジェクトの作成で図1のようにOfficeを選択し、ここからExcel 2007 ブックなどアドインではないテンプレートを選択します。次にVSTOプロジェクトウィザードでひな形にする文書を選択します。
Excelで新規の場合には図4に示す4種類の形式から選択できます。既存のドキュメントを選択する場合でも図4に示す4種類の拡張子のファイルを元にすることができます。
- *.xlsx
- *.xlsm
- *.xlsb
プロジェクトを作成すると以下のようなコードが生成されます(Excel 2007 ブックをC#で作成した場合のThisWorkbook.csクラスの初期コード)。
namespace ExcelWorkbook1 { public partial class ThisWorkbook { private void ThisWorkbook_Startup(object sender, System.EventArgs e) { } private void ThisWorkbook_Shutdown(object sender, System.EventArgs e) { } //VSTO で生成されたコード } }
VBAのコードを記述したことがある方であれば、StartupやShutdownなどにはなじみがあるかと思います。他にもVBAのときに利用できていたイベントのほとんどが利用可能です。
この方法により作成されたExcelシートに対して、コントロールなどを配置し、レイアウトしたものが図3に示すようなものになります。Excelシート上に張り付けたボタンなどはWindowsアプリケーション開発時と同様にダブルクリックすることでデフォルトイベントをコード内に実装できます。
本稿のサンプルとして付けている「DocumentLevel.zip」はこれらの手順を一通り終えた後のものになります(もっともサンプルですのでイベントハンドラの中身はまったく無意味です)。サンプルを実行すると注文票(のようなもの)がデザインされたExcelが立ち上がり、ボタンクリックや数量の変更イベントに応じたアクションが実行されます。
アプリケーションレベルのアドインアプリケーションの作成
アプリケーションレベルのアドインを作成するには、VS2008の新規プロジェクトの作成で図1のようにOfficeを選択し、ここから「Excel 2007 アドイン」など、最後に「アドイン」とつくテンプレートを選択します。ドキュメントレベルのカスタマイズとは違い、アプリケーションレベルのアドインプロジェクトの場合にはウィザードなどは無く、プロジェクトの作成が完了します。この状態ではUIにかかわる部分などもなくThisAddinクラスが生成されるだけです。
public partial class ThisAddIn { private void ThisAddIn_Startup(object sender, System.EventArgs e) { } private void ThisAddIn_Shutdown(object sender, System.EventArgs e) { } //VSTO で生成されたコード }
StartupやShutdownなどのイベントがある点はドキュメントレベルで作成した場合と変わりませんが、こちらはOfficeアプリケーションの開始、終了に反応するイベントです。アプリケーションレベルの場合には、他にさまざまなイベントがあるわけではなく、Officeアプリケーションのメニューや作業ウィンドウを独自に定義して、それらから発生するイベントを処理するというのが一般的な形になります。
リボンの開発
VSTO 2008では、Office 2007から新しく導入されたリボンの開発を行うことができます。リボンはドキュメントレベルのカスタマイズでも、アプリケーションレベルのアドインでも作成できます。実際にリボンのデザインを行うためにはプロジェクトの「新しい項目の追加」でリボン(ビジュアルデザイナ)を選択します。
新しい項目を追加すると、図6のようなリボンのデザイン画面が開きます。
リボンにはWindowsフォームの一般的なコントロールではなく、リボン用のOfficeリボンコントロールを配置します。利用するコントロールは異なりますが、デザイナ上にドラッグ&ドロップでコントロールを配置し、コントロールをダブルクリックするなどしてイベントハンドラを作成して、処理を記述するという方法は変わりません。なお、Windowsフォームのボタンなどのコントロールは利用できませんがFileOpenDialogなどコンポーネントは利用できますので適宜活用してください。
先ほど選んだリボン(ビジュアルデザイナ)を利用すると簡単にリボンのUIをデザインできますが、より高度なリボンの処理をしたい場合には、図5の状態でリボン(XML)を選択する必要があります。そうすることによってリボンのデザイン以外にも、以下に示すようなより高度な処理を行うことができるようになります。
- カスタムタブ(アドインと表示されるタブなど)に他のタブのグループを表示する
- リボンコントロールの既存の処理をオーバーライドする
- クイックアクセスツールバーの表示項目をカスタマイズする
- アドイン間でリボンを共有する
すでにリボン(ビジュアルデザイナ)によって作成済みのリボンがある場合には、リボンのデザイナ画面を右クリックして[リボンをXMLにエクスポート]とすることによってもリボンのXML定義を出力できます。
本稿で提供している「ApplicationLevel.zip」は、Excel 2007用のアプリケーションレベルのアドインを作成し、カスタムのリボンを追加して、リボン内のボタンが押されたときのイベントハンドラを処理するまでのサンプルを示したものです。
サンプルを実行するとリボンのタブに「アドイン」が追加され、そこにgroup1およびbutton1が表示されます。button1のClickイベントがRibbon1.csに実装されているため、button1をクリックするとメッセージが表示されます。