Boost」など、さまざまなカンファレンスを企画・運営しています。BOOKS(コードジン・ブックス)は、CodeZineの連載からカットアップした、開発現場の課題解決に役立つ書籍シリーズです。1だいぶ前置きが長くなりましたが、ここからは実際にサンプルのアプリケーションを作成する過程を通してVSTOの機能を見ていきます。ブックなどアドインではないテンプレートを選択します。次にVSTOプロジェクトウィザードでひな形にする文書を選択します。Excelで新規の場合には図4に示す4種類の形式から選択できます。既存のドキュメントを選択する場合でも図4に示す4種類の拡張子のファイルを元にすることができます。2007では従来のExcelの拡張子(xls)が変更され、用途によって以下の3種類を使い分けるようになりました。2007で作成される通常のExcelファイルにつける拡張子です。特別なことがない限り、通常はこの拡張子を利用します。2007で作成されるブックがマクロの実行を含む場合につける拡張子です。2007ではこの形式以外でマクロを実行することはできません。*.xlsb従来のExcelどおりバイナリ交換ファイル形式(BIFF)で保存する場合につける拡張子です。BIFFのバージョンは12となります。BIFF形式のファイルを解析するアプリケーションと連携する必要がある場合に利用します。2007でサポートされるファイル拡張子になります。ブックをC#で作成した場合のThisWorkbook.csクラスの初期コード)。}}VBAのコードを記述したことがある方であれば、StartupやShutdownなどにはなじみがあるかと思います。他にもVBAのときに利用できていたイベントのほとんどが利用可能です。StartupやShutdownWindowsフォームやWebページでLoadイベントなどがあるように、WordやExcelにもイベントが用意されています。Startupはドキュメントが開かれたタイミング、Shutdownはドキュメントが終了するタイミングに発生するイベントで、他にもさまざまなイベントが用意されています。イベントドリブンでプログラミングを行うということに関しては大差がありませんので、他の.NETアプリケーションを開発した経験があればこのような点はすぐに押さえられると思います。この方法により作成されたExcelシートに対して、コントロールなどを配置し、レイアウトしたものが図3に示すようなものになります。Excelシート上に張り付けたボタンなどはWindowsアプリケーション開発時と同様にダブルクリックすることでデフォルトイベントをコード内に実装できます。本稿のサンプルとして付けている「DocumentLevel.zip」はこれらの手順を一通り終えた後のものになります(もっともサンプルですのでイベントハンドラの中身はまったく無意味です)。サンプルを実行すると注文票(のようなもの)がデザインされたExcelが立ち上がり、ボタンクリックや数量の変更イベントに応じたアクションが実行されます。アドイン」など、最後に「アドイン」とつくテンプレートを選択します。ドキュメントレベルのカスタマイズとは違い、アプリケーションレベルのアドインプロジェクトの場合にはウィザードなどは無く、プロジェクトの作成が完了します。この状態ではUIにかかわる部分などもなくThisAddinクラスが生成されるだけです。生成されたコード}StartupやShutdownなどのイベントがある点はドキュメントレベルで作成した場合と変わりませんが、こちらはOfficeアプリケーションの開始、終了に反応するイベントです。アプリケーションレベルの場合には、他にさまざまなイベントがあるわけではなく、Officeアプリケーションのメニューや作業ウィンドウを独自に定義して、それらから発生するイベントを処理するというのが一般的な形になります。2007から新しく導入されたリボンの開発を行うことができます。リボンはドキュメントレベルのカスタマイズでも、アプリケーションレベルのアドインでも作成できます。実際にリボンのデザインを行うためにはプロジェクトの「新しい項目の追加」でリボン(ビジュアルデザイナ)を選択します。新しい項目を追加すると、図6のようなリボンのデザイン画面が開きます。図6:リボンのデザイン画面リボンにはWindowsフォームの一般的なコントロールではなく、リボン用のOfficeリボンコントロールを配置します。利用するコントロールは異なりますが、デザイナ上にドラッグ&ドロップでコントロールを配置し、コントロールをダブルクリックするなどしてイベントハンドラを作成して、処理を記述するという方法は変わりません。Windowsフォームのボタンなどのコントロールは利用できませんがFileOpenDialogなどコンポーネントは利用できますので適宜活用してください。先ほど選んだリボン(ビジュアルデザイナ)を利用すると簡単にリボンのUIをデザインできますが、より高度なリボンの処理をしたい場合には、図5の状態でリボン(XML)を選択する必要があります。することによってリボンのデザイン以外にも、以下に示すようなより高度な処理を行うことができるようになります。カスタムタブ(アドインと表示されるタブなど)に他のタブのグループを表示するリボンコントロールの既存の処理をオーバーライドするクイックアクセスツールバーの表示項目をカスタマイズするアドイン間でリボンを共有するすでにリボン(ビジュアルデザイナ)によって作成済みのリボンがある場合には、リボンのデザイナ画面を右クリックして[リボンをXMLにエクスポート]とすることによってもリボンのXML定義を出力できます。2007用のアプリケーションレベルのアドインを作成し、カスタムのリボンを追加して、リボン内のボタンが押されたときのイベントハンドラを処理するまでのサンプルを示したものです。サンプルを実行するとリボンのタブに「アドイン」が追加され、そこにgroup1およびbutton1が表示されます。button1のClickイベントがRibbon1.csに実装されているため、button1をクリックするとメッセージが表示されます。NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Technologies。執筆コミュニティ「WINGSプロジェクト」代表。