【VSTO】既存のリボンにグループを追加する

(VSTO Outlook idMso Customize Ribbon TabMail GroupMailNew)

新規にカスタムリボンをOfficeアプリに追加する場合には、リボンの追加をします。
そうではなく、元々あるタブにボタンの追加など行うこともできます。

そして残念ながら、Ribbon(XML)でしかできません。

新規作成の横にグループを追加

グループ追加イメージ

f:id:orzmakoto:20150511003610p:plain

Ribbon1.cs

public string GetCustomUI(string ribbonID)
{
  if (ribbonID == "Microsoft.Outlook.Explorer")
  {
    return GetResourceText("OutlookAddIn.Ribbon1.xml");
  }
  return "";
}

Ribbon1.xml

<ribbon>
  <tabs>
    <tab idMso="TabMail">
      <group id="MyGroup" insertAfterMso="GroupMailNew" 
           label="MyGroup" autoScale="true">
        <button id="MyButton" label="ボタン" 
            size="large" onAction="RibbonTest"/>
        <button id="MyButton2" label="ボタン2" 
            size="large" onAction="RibbonTest"/>
      </group>
    </tab>
  </tabs>
</ribbon>

ここで大事なのが、idMsoです。

idMsoは、Officeアプリの中でユニークなオブジェクトIDです。Officeアプリの中では、idMsoによって動き(挙動、表示箇所、アイコンなど)が決められています。

<tab idMso="TabMail">

と指定しているので、タブの中に記述したGroupやその中のButtonがOutlookのホームタブに表示されるようになります。
Outlookに表示される内容は、元々のタブメニューXMLで記述したタブになります。

MyGroupが新規作成の隣に来ているのは、insertAfterMsoを指定しているためです。
リファレンスを見ると

insertAfterMso:後に挿入するビルトイン コントロールの ID。InsertBeforeMso、InsertAfterQ、InsertBeforeQ とは相互排他的関係。

となっています。指定したidMsoのあとに表示されますってこと。
逆に、指定したidMsoの前に表示させたい場合には、insertBeforeMsoを使います。

idMsoの値の一覧はMSからダウンロードできます。
Download Office 2013 Help Files: Office Fluent User Interface Control Identifiers from Official Microsoft Download Center
Outlookにかぎらず拡張可能なすべてのOfficeアプリのidMsoが載っています。


(´・∀・`)ヘー
Outlook添付ツールもタブの追加じゃなくてグループの追加のほうが良かったかもしれない。