この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
リボンのカスタマイズ
今回はExcel上部に配置されているリボンのカスタマイズを行なってみたいと思います。下記のようなAWSタブを作成します!
開発環境
- Windows 8
- Visual Studio 2012(C#)
- Excel 2013
Excelアドインプロジェクトの作成
まず、ExcelAddIn_Ribbonという名前のプロジェクトを作成しておきます。
- ファイル>新規作成>プロジェクト
- テンプレート>Visual C#>Office>2010>Excel 2010 アドインを選択
- プロジェクトの名前をExcelAddIn_Ribbonとする
- OKボタンをクリック
プロジェクトへのリボンの追加
次にプロジェクトにリボンを追加します。
- プロジェクト右クリック>追加>新しい項目
- Visual C# アイテム>Office>リボン(ビジュアルなデザイナー)を選択
プロジェクトにリボンが追加され、リボンデザイナが開きます。
タブとグループの修正
ここでリボンにデフォルトで用意されているタブを修正します。デザイナでTabAddInsタブが選択されていることを確認して、プロパティパネルで下記のプロパティを修正します。
- Name:AwsTab
- Label:AWS
タブには複数のグループを配置することができます。デフォルトでgroup1というグループが用意されていますので、この名前をhelloに修正しておきます。
- Label:hello
グループへのコントロールの追加
次に、helloグループにボタンを追加します。ツールボックスを表示すると、下記のような Officeリボンコントロール が表示されます。その名の通り、Officeアプリケーションのリボン開発用のコントロールになります。
こちらのButtonを1個helloグループに配置します。
ボタンのイベントハンドラの実装
先ほど追加したボタンのプロパティビューで雷マークのボタンをクリックし、イベント一覧を表示します。リボン用のボタンにはClickイベントしかありません。Clickイベント右のテキストボックスをダブルクリックしてイベントハンドラを生成します。
Ribbon1クラスにbutton1_Clickイベントハンドラが追加されます。ここにコードを追加していきます。今回はWindows FormsのMessageBoxでアラートを表示するコードを追加します。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Microsoft.Office.Tools.Ribbon;
namespace ExcelAddIn_Ribbon
{
public partial class Ribbon1
{
private void Ribbon1_Load(object sender, RibbonUIEventArgs e)
{
}
private void button1_Click(object sender, RibbonControlEventArgs e)
{
MessageBox.Show("Hello AWS!", "Hello AWS Message Box", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
}
}
※ button1インスタンスへのイベントハンドラ追加処理は、実際にはRibbonDesigner.csで行われています。このファイルはデザイナが自動的に修正するファイルなので、見るだけで触らないでおきましょう。
アプリケーションの実行
それではアプリケーションを実行しましょう。アプリケーションを実行すると、まず見慣れたリボンの右端に『AWSタブ』が追加されていることがわかります。
AWSタブをクリックすると、button1ボタンが表示されます。
button1ボタンをクリックすると下記のようにメッセージボックスが表示されます。
もう少しリボンをカスタマイズする
もう少しリボンをカスタマイズしてみます。AWSタブにOfficeリボンコントロールの Group を追加し、LabelをEC2にしておきます。
また、そのEC2グループにComboBoxを追加して、下記のプロパティを修正しておきます。
- Name:regionComboBox
- Label:region
- ShowLabel:False
ここまででリボンは下記のようになります。
次に先ほど修正したRibbon1.csにコードを追加します。下記ではリボンがロードされた際に、リージョンコンボボックスのアイテムを設定し、その設定値に応じてメッセージボックスのメッセージを変更するようにしています。
private void Ribbon1_Load(object sender, RibbonUIEventArgs e)
{
// リージョンコンボボックスのリストアイテムを作成する
RibbonDropDownItem item;
item = Factory.CreateRibbonDropDownItem();
item.Label = "US East (Northern Virginia)";
regionComboBox.Items.Add(item);
item = Factory.CreateRibbonDropDownItem();
item.Label = "US West (Oregon)";
regionComboBox.Items.Add(item);
item = Factory.CreateRibbonDropDownItem();
item.Label = "US West (Northern California)";
regionComboBox.Items.Add(item);
item = Factory.CreateRibbonDropDownItem();
item.Label = "EU (Ireland)";
regionComboBox.Items.Add(item);
item = Factory.CreateRibbonDropDownItem();
item.Label = "Asia Pacific (Singapore)";
regionComboBox.Items.Add(item);
item = Factory.CreateRibbonDropDownItem();
item.Label = "Asia Pacific (Sydney)";
regionComboBox.Items.Add(item);
item = Factory.CreateRibbonDropDownItem();
item.Label = "Asia Pacific (Tokyo)";
regionComboBox.Items.Add(item);
item = Factory.CreateRibbonDropDownItem();
item.Label = "South America (Sao Paulo)";
regionComboBox.Items.Add(item);
}
private void button1_Click(object sender, RibbonControlEventArgs e)
{
var selectedRegion = regionComboBox.Text;
MessageBox.Show("Hello AWS! " + selectedRegion, "Hello AWS Message Box", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
アプリケーションを起動してみると、下記のようにコンボボックスが表示されます。
Tokyoリージョンを選択して、button1ボタンをクリックすると、下記のようなメッセージボックスが表示されます。
Hello AWS! Asia Pacific (Tokyo)と表示された画面を見て、筆者は日本に東京リージョンがやってきた日の事を思い出して泣きそうになりました。。。
最後に
今回はExcelのリボンをカスタマイズしてみました。
ここまでExcelをカスタマイズしてみると、かなり簡単にExcelを改造できそうだなという印象を持ちました。あとはコードビハインドでクラウドとの通信を行ったり、Excelのセルやシートを操作する処理を記述していけば良いことになります。
(インストーラどうするの?という疑問が残りますが、これに関してはおいおいブログに書いていこうと思います)