以前の内容に続いて、OutlookのCOMアドインについて今回はリボンのカスタマイズを行います。
前回まではVisual Studio Codeと.NET Frameworkを使ってOutlookのCOMアドインを開発し、インストーラー化まで行いました。
今回はその続きとして、OutlookのリボンUIをカスタマイズし、ホームタブに独自のボタンを追加していきます。
COMアドインでリボンを拡張するには、XMLでUI構造を定義し、IRibbonExtensibilityインターフェースを使って読み込む必要があります。
- 最終的なコード全体は以下にあります
csprojで参照設定
-
using Microsoft.Office.Core;を使うため
csprojへ以下を追加して参照できるようにします-
OFFICE.DLLを探してプロジェクト内へコピーする - Private:falseでビルド時にはコピーしないようにする
- dllを含めて再配布するとライセンス違反となるので注意
-
<ItemGroup>
<Reference Include="Microsoft.Office.Core">
<HintPath>Package\OFFICE.DLL</HintPath>
<!-- ビルド時にdllを含めるか -->
<Private>false</Private>
</Reference>
リボンのカスタマイズ
- リボンUIのカスタマイズは、XMLファイルで定義したUI構造を読み込むことで実現します
- 今回はホームタブに独自のグループとボタンを追加します
ホームへ追加xml
- プロジェクトフォルダに
Ribbonフォルダを作って保存
ExplorerRibbon.xml
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui">
<ribbon>
<tabs>
<tab idMso="TabMail">
<group id="customGroup" label="ホーム拡張">
<button id="btnExplorer" label="拡張Button" imageMso="HappyFace" onAction="btnExplorer_onAction" />
</group>
</tab>
</tabs>
</ribbon>
</customUI>
ホームへ追加cs
-
Microsoft.Outlook.ExplorerがホームのRibbonIDとなる - リソース名は、名前空間+ファイル名.xmlで指定する
フォルダ構成:OutlookCOMAddin\Ribbon\ExplorerRibbon.xml
public string GetCustomUI(string RibbonID)
{
switch (RibbonID)
{
case "Microsoft.Outlook.Explorer":
return LoadRibbonXML("OutlookCOMAddin.Ribbon.ExplorerRibbon.xml");
default:
return string.Empty;
}
}
private string LoadRibbonXML(string resourceName)
{
var assembly = Assembly.GetExecutingAssembly();
using (Stream stream = assembly.GetManifestResourceStream(resourceName))
using (StreamReader reader = new StreamReader(stream))
{
return reader.ReadToEnd();
}
}
- インターフェース
IRibbonExtensibilityを追加します
public class Connect : IDTExtensibility2, IRibbonExtensibility
csprojへリソースの追加
- xmlを読み込めるようにします
<ItemGroup>
<EmbeddedResource Include="Ribbon\ExplorerRibbon.xml" />
</ItemGroup>
ボタンクリックのアクション
- ボタンクリックでメールタイトルを表示します
- メソッド名はxmlの
onActionです
public void btnExplorer_onAction(IRibbonControl control)
{
olExplorer = outlookApp.ActiveExplorer();
if (olExplorer.Selection.Count > 0)
{
// Outlook.Selectionは1始まり
object item = olExplorer.Selection[1];
if (item is Outlook.MailItem mailItem)
{
MessageBox.Show(mailItem.Subject);
}
}
}
完成
- タブの右端にボタンが追加されて、クリックするとメッセージがでます
RibbonIDとidMSOの一覧
- RibbonIDの一覧
-
idMSOなどの一覧
ここにあるようですが探すのは大変です
Copilotに聞いたらいい感じの内容をくれました
| リボン画面の種類 | RibbonID | 主なタブID (idMso) |
説明 |
|---|---|---|---|
| ホーム画面(Explorer) | Microsoft.Outlook.Explorer | TabMail | 受信トレイなどのメイン画面の「ホーム」タブ |
| メール作成画面 | Microsoft.Outlook.Mail.Compose | TabNewMailMessage | 新規メール作成ウィンドウの「メッセージ」タブ |
| メール閲覧画面 | Microsoft.Outlook.Mail.Read | TabReadMessage | メールを開いたときの「メッセージ」タブ |
-
idMSOはinspect.exeでも調べられました
AutomationIdがidMSOと一致していることが多いようです
ただし必ず一致するわけではないので注意
inspect.exeはWindows SDKに含まれています

