0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【リボン編】OutlookのCOMアドインでリボンのカスタマイズ

Posted at

以前の内容に続いて、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);
            }
        }
    }

完成

  • タブの右端にボタンが追加されて、クリックするとメッセージがでます

image.png

RibbonIDとidMSOの一覧

リボン画面の種類 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に含まれています

  • ホームタブから順番にクリックしたinspectの画面です
    一覧のgif.gif

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?