Shoeisha Technology Media

CodeZine(コードジン)

特集ページ一覧

Visual Studio Tools for Officeで作るOfficeアプリケーション

Visual Studio 2008 徹底入門 (9)

  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加
目次

アプリケーションの作成 1

 だいぶ前置きが長くなりましたが、ここからは実際にサンプルのアプリケーションを作成する過程を通してVSTOの機能を見ていきます。

ドキュメントレベルのカスタマイズアプリケーションの作成

 ドキュメントレベルのカスタマイズアプリケーションを作成するには、VS2008の新規プロジェクトの作成で図1のようにOfficeを選択し、ここからExcel 2007 ブックなどアドインではないテンプレートを選択します。次にVSTOプロジェクトウィザードでひな形にする文書を選択します。

 Excelで新規の場合には図4に示す4種類の形式から選択できます。既存のドキュメントを選択する場合でも図4に示す4種類の拡張子のファイルを元にすることができます。

図4:ドキュメントレベルのカスタマイズプロジェクトウィザード
図4:ドキュメントレベルのカスタマイズプロジェクトウィザード
Excel 2007の拡張子
 Excel 2007では従来のExcelの拡張子(xls)が変更され、用途によって以下の3種類を使い分けるようになりました。
  • *.xlsx
  • Excel 2007で作成される通常のExcelファイルにつける拡張子です。特に特別なことがない限り、通常はこの拡張子を利用します。
  • *.xlsm
  • Excel 2007で作成されるブックがマクロの実行を含む場合につける拡張子です。Excel 2007ではこの形式以外でマクロを実行することはできません。
  • *.xlsb
  • 従来のExcelどおりバイナリ交換ファイル形式(BIFF)で保存する場合につける拡張子です。ただし、BIFFのバージョンは12となります。BIFF形式のファイルを解析するアプリケーションと連携する必要がある場合に利用します。
これらに従来のxls形式(BIFF8)を加えた4種類がExcel 2007でサポートされるファイル拡張子になります。

 プロジェクトを作成すると以下のようなコードが生成されます(Excel 2007 ブックをC#で作成した場合のThisWorkbook.csクラスの初期コード)。

ThisWorkbookの初期コード(C#)
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のときに利用できていたイベントのほとんどが利用可能です。

StartupやShutdown
 WindowsフォームやWebページでLoadイベントなどがあるように、WordやExcelにもイベントが用意されています。Startupはドキュメントが開かれたタイミング、Shutdownはドキュメントが終了するタイミングに発生するイベントで、他にもさまざまなイベントが用意されています。イベントドリブンでプログラミングを行うということに関しては大差がありませんので、他の.NETアプリケーションを開発した経験があればこのような点はすぐに押さえられると思います。

 この方法により作成されたExcelシートに対して、コントロールなどを配置し、レイアウトしたものが図3に示すようなものになります。Excelシート上に張り付けたボタンなどはWindowsアプリケーション開発時と同様にダブルクリックすることでデフォルトイベントをコード内に実装できます。

 本稿のサンプルとして付けている「DocumentLevel.zip」はこれらの手順を一通り終えた後のものになります(もっともサンプルですのでイベントハンドラの中身はまったく無意味です)。サンプルを実行すると注文票(のようなもの)がデザインされたExcelが立ち上がり、ボタンクリックや数量の変更イベントに応じたアクションが実行されます。

アプリケーションレベルのアドインアプリケーションの作成

 アプリケーションレベルのアドインを作成するには、VS2008の新規プロジェクトの作成で図1のようにOfficeを選択し、ここから「Excel 2007 アドイン」など、最後に「アドイン」とつくテンプレートを選択します。ドキュメントレベルのカスタマイズとは違い、アプリケーションレベルのアドインプロジェクトの場合にはウィザードなどは無く、プロジェクトの作成が完了します。この状態ではUIにかかわる部分などもなくThisAddinクラスが生成されるだけです。

ThisAddinクラスの初期コード(C#)
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から新しく導入されたリボンの開発を行うことができます。リボンはドキュメントレベルのカスタマイズでも、アプリケーションレベルのアドインでも作成できます。実際にリボンのデザインを行うためにはプロジェクトの「新しい項目の追加」でリボン(ビジュアルデザイナ)を選択します。

図5:リボン(ビジュアルデザイナ)の追加
図5:リボン(ビジュアルデザイナ)の追加

 新しい項目を追加すると、図6のようなリボンのデザイン画面が開きます。

図6:リボンのデザイン画面
図6:リボンのデザイン画面

 リボンにはWindowsフォームの一般的なコントロールではなく、リボン用のOfficeリボンコントロールを配置します。利用するコントロールは異なりますが、デザイナ上にドラッグ&ドロップでコントロールを配置し、コントロールをダブルクリックするなどしてイベントハンドラを作成して、処理を記述するという方法は変わりません。なお、Windowsフォームのボタンなどのコントロールは利用できませんがFileOpenDialogなどコンポーネントは利用できますので適宜活用してください。

 先ほど選んだリボン(ビジュアルデザイナ)を利用すると簡単にリボンのUIをデザインできますが、より高度なリボンの処理をしたい場合には、図5の状態でリボン(XML)を選択する必要があります。そうすることによってリボンのデザイン以外にも、以下に示すようなより高度な処理を行うことができるようになります。

  • カスタムタブ(アドインと表示されるタブなど)に他のタブのグループを表示する
  • リボンコントロールの既存の処理をオーバーライドする
  • クイックアクセスツールバーの表示項目をカスタマイズする
  • アドイン間でリボンを共有する

 すでにリボン(ビジュアルデザイナ)によって作成済みのリボンがある場合には、リボンのデザイナ画面を右クリックして[リボンをXMLにエクスポート]とすることによってもリボンのXML定義を出力できます。

図7:リボンのXML定義の出力
図7:リボンのXML定義の出力

 本稿で提供している「ApplicationLevel.zip」は、Excel 2007用のアプリケーションレベルのアドインを作成し、カスタムのリボンを追加して、リボン内のボタンが押されたときのイベントハンドラを処理するまでのサンプルを示したものです。

 サンプルを実行するとリボンのタブに「アドイン」が追加され、そこにgroup1およびbutton1が表示されます。button1のClickイベントがRibbon1.csに実装されているため、button1をクリックするとメッセージが表示されます。


  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • 山田 祥寛(ヤマダ ヨシヒロ)

    静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト」代表。 主な著書に「入門シリーズ(サーバサイドAjax/XMLD...

  • WINGSプロジェクト りばてぃ/FUJIKO/ナオキ(リバティ, フジコ, ナオキ)

    <WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂...

バックナンバー

連載:Visual Studio 2008徹底入門

もっと読む

All contents copyright © 2005-2019 Shoeisha Co., Ltd. All rights reserved. ver.1.5