Visual Studio Tools for Office プロジェクトのことはじめ
Visual Studio Tools for Office(以下、VSTO)を触る機会があったので、備忘録もかねて情報を記載する。VSTOではVBAスクリプトを利用した開発とは異なり、.NET Frameworkを利用したアドオン開発が可能であるため、.NET開発者にとって開発勝手の良い開発手法だといえる。
VSTOプロジェクトの作成
Visual Studio を管理者モードで起動し、[ファイル]-[新規作成]-[プロジェクト]から新規作成ダイアログを起動する。Officeのカテゴリから Excel 2010 アドオンを選択してVSTOプロジェクトを作成する。
プロジェクト内にはThisAddIn.cs が自動生成されており、以下のメソッドが記載されている。
- アドインが読み込まれた際に実行される ThisAddIn_Startupメソッド http://msdn.microsoft.com/ja-jp/site/ee247707
- アドインがアンロードされる際に実行される ThisAddIn_Shutdownメソッド http://msdn.microsoft.com/ja-jp/library/microsoft.office.tools.addinbase.shutdown.aspx
こちらに対し、以下の処理を追記する。
- ThisAddin.cs の抜粋
namespace ExcelAddIn1 { public partial class ThisAddIn { private void ThisAddIn_Startup(object sender, System.EventArgs e) { //追記 System.Windows.Forms.MessageBox.Show("アドオンのロード"); } private void ThisAddIn_Shutdown(object sender, System.EventArgs e) { //追記 System.Windows.Forms.MessageBox.Show("アドオンのアンロード"); }
次に、Visual Studioからアドオンを実行する。F5を押下するとExcelが起動し、「アドオンのロード」と表示されたダイアログが起動するはずだ。また、、Excelを閉じる際に「アドオンのアンロード」と表示されたダイアログが起動する。
リボンインタフェースの追加
プロジェクトを右クリックし、メニューの[新規項目の追加]から[リボン(ビジュアルなデザイナー)]を選択する。Ribbon1.cs が追加され、デザイナが起動する。ここからボタンを新規に配置し、Clickイベントにメソッドを追加し、メソッド内に以下を記載する。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using Microsoft.Office.Tools.Ribbon; namespace ExcelAddIn1 { public partial class Ribbon1 { private void Ribbon1_Load(object sender, RibbonUIEventArgs e) { } private void button1_Click(object sender, RibbonControlEventArgs e) { var activeSheet = ExcelAddIn1.Globals.ThisAddIn.Application.ActiveSheet as Microsoft.Office.Interop.Excel.Worksheet; //Excelのセルは添え字が1から開始な点に注意 activeSheet.Cells[1, 1] = "書き込んでみるでござる"; } } }
上記の記述後、Visual Studio からアドオンを起動する。Excelのリボンインターフェースに[アドオン]が追加されるので、[アドオン]から追加したボタンを押下して処理を実行する。正常にアプリケーションの処理が実行されれば、以下の画面が表示されるはずだ。
アドイン本体とリボンインターフェースで値を共有する
ThisAddInインスタンスとRibbon1インスタンスで値を共有する際にも ExcelAddIn1.Globals を利用する。以下の様に処理を記述する。
- ExcelAddIn1.cs の抜粋
namespace ExcelAddIn1 { public partial class ThisAddIn { public string Status { get; set; } private void ThisAddIn_Startup(object sender, System.EventArgs e) { Status = "読み込まれたでござる"; System.Windows.Forms.MessageBox.Show("アドオンのロード"); } private void ThisAddIn_Shutdown(object sender, System.EventArgs e) { System.Windows.Forms.MessageBox.Show("アドオンのアンロード"); }
- Ribbon1.cs の抜粋
namespace ExcelAddIn1 { public partial class Ribbon1 { private void Ribbon1_Load(object sender, RibbonUIEventArgs e) { } private void button1_Click(object sender, RibbonControlEventArgs e) { var activeSheet = ExcelAddIn1.Globals.ThisAddIn.Application.ActiveSheet as Microsoft.Office.Interop.Excel.Worksheet; activeSheet.Cells[1, 1] = "書き込んでみるでござる"; activeSheet.Cells[2, 1] = ExcelAddIn1.Globals.ThisAddIn.Status; } } }
処理の記述後にVisual Studio からアドオンを起動し、リボンインタフェースの追加 と同様の手順でアドオンの処理を実行する。以下の画面が表示されれば処理は完了だ。