【Excel改造】オレオレリボンの作成【AWSタブを作るよ】

2013.08.07

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

リボンのカスタマイズ

今回はExcel上部に配置されているリボンのカスタマイズを行なってみたいと思います。下記のようなAWSタブを作成します!

Ribbon00

開発環境

  • Windows 8
  • Visual Studio 2012(C#)
  • Excel 2013

Excelアドインプロジェクトの作成

まず、ExcelAddIn_Ribbonという名前のプロジェクトを作成しておきます。

  • ファイル>新規作成>プロジェクト
  • テンプレート>Visual C#>Office>2010>Excel 2010 アドインを選択
  • プロジェクトの名前をExcelAddIn_Ribbonとする
  • OKボタンをクリック

プロジェクトへのリボンの追加

次にプロジェクトにリボンを追加します。

  • プロジェクト右クリック>追加>新しい項目
  • Visual C# アイテム>Office>リボン(ビジュアルなデザイナー)を選択

Ribbon01

プロジェクトにリボンが追加され、リボンデザイナが開きます。

Ribbon03

タブとグループの修正

ここでリボンにデフォルトで用意されているタブを修正します。デザイナでTabAddInsタブが選択されていることを確認して、プロパティパネルで下記のプロパティを修正します。

  • Name:AwsTab
  • Label:AWS

Ribbon02

Ribbon04

タブには複数のグループを配置することができます。デフォルトでgroup1というグループが用意されていますので、この名前をhelloに修正しておきます。

  • Label:hello

Ribbon05

グループへのコントロールの追加

次に、helloグループにボタンを追加します。ツールボックスを表示すると、下記のような Officeリボンコントロール が表示されます。その名の通り、Officeアプリケーションのリボン開発用のコントロールになります。

Ribbon06

こちらのButtonを1個helloグループに配置します。

ボタンのイベントハンドラの実装

先ほど追加したボタンのプロパティビューで雷マークのボタンをクリックし、イベント一覧を表示します。リボン用のボタンにはClickイベントしかありません。Clickイベント右のテキストボックスをダブルクリックしてイベントハンドラを生成します。

Ribbon07

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タブ』が追加されていることがわかります。

Ribbon08

AWSタブをクリックすると、button1ボタンが表示されます。

Ribbon09

button1ボタンをクリックすると下記のようにメッセージボックスが表示されます。

Ribbon10

もう少しリボンをカスタマイズする

もう少しリボンをカスタマイズしてみます。AWSタブにOfficeリボンコントロールの Group を追加し、LabelをEC2にしておきます。

また、そのEC2グループにComboBoxを追加して、下記のプロパティを修正しておきます。

  • Name:regionComboBox
  • Label:region
  • ShowLabel:False

ここまででリボンは下記のようになります。

Ribbon11

次に先ほど修正した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);
        }

アプリケーションを起動してみると、下記のようにコンボボックスが表示されます。

Ribbon12

Tokyoリージョンを選択して、button1ボタンをクリックすると、下記のようなメッセージボックスが表示されます。

Ribbon13

Hello AWS! Asia Pacific (Tokyo)と表示された画面を見て、筆者は日本に東京リージョンがやってきた日の事を思い出して泣きそうになりました。。。

最後に

今回はExcelのリボンをカスタマイズしてみました。

ここまでExcelをカスタマイズしてみると、かなり簡単にExcelを改造できそうだなという印象を持ちました。あとはコードビハインドでクラウドとの通信を行ったり、Excelのセルやシートを操作する処理を記述していけば良いことになります。

(インストーラどうするの?という疑問が残りますが、これに関してはおいおいブログに書いていこうと思います)

参考