Excelからいきなり(USDM等を記述した)FreeMindの.mmファイルを開ける(つまりはXSLTでXMLファイルをXMLSSに自動変換してシートとして開く)Excelアドインの紹介

# 出来るようになることと使い方

以前より、[マインドマップツール(FreeMind)を使ってUSDMを記述し、EXCELに変換する方法](https://qiita.com/sho1884/items/47d441d424c4c89cc46c)を示してきましたが、、、

「面倒だ。ExcelからいきなりFreeMindのファイルを開けるようにしてしまえ！」と思うようになり、やってみました。

実際にやったことは先に示した記事と同様の処理のEXCELアドイン化です。これでどういう使い勝手になるのかをまず示します。

EXCELアドインは下図のようにリボンUIに配置して表示できます。

![USDM雛型.xlsx - Excel 2019_07_26 13_12_37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246520/a0242687-ea52-59d9-5519-fe241ba72c13.png)

この図の例では、自分専用のタブを作り、そのリボンの中にグループ「変換ツール」を作り、そしてその中にアドインを起動するアイコンを配置しています。リボンに二つボタンが表示されていますが、どちらも今回紹介するEXCELアドインを起動するものです。

左のFreeMindUSDMのボタンを押下すると、FreeMind(拡張子.mm)のファイルを選択するダイアログが表示されます。
USDMとしてのルールに従ったFreeMindのファイルを選択すると、いきなりEXCELに変換されたUSDMのシートが開くようになります。
このシートは、自動変換された上で、開かれた時点で既にファイルとして保存されたものになっています。どこに保存されているかというと、選択したFreeMindのファイルと同じフォルダで、名前はFreeMindのファイルと同じで拡張子が.xlsxに設定されたものになります。
（既にその名前のファイルが存在する場合には、上書きするかどうかを問うダイアログが出ます。上書きしない場合は必要に応じてご自身でどこかに名前を付けて保存してください。）

右のFreeMindOpenのボタンも、ほとんど同じ動作をします。
ただしこちらはUSDMを想定していないので、そのルールに従っていない一般のFreeMindのファイルで良く、得られる結果としてはFreeMindの階層構造に従ったEXCELシートが開くことになります。

では、次にこのアドインの登録方法を説明します。

# アドインの登録方法

1. [ ] 以下のGitHubのbinの下にFreeMindUSDM.xlsmが置いてありますので、これをダウンロードして開きます。
[https://github.com/sho1884/FreeMind2USDM](https://github.com/sho1884/FreeMind2USDM)

2. [ ] EXCELのメニューから「名前を付けて保存」を選択します。
3. [ ] この時点での保存場所選択は何処でも良いのでテキトーに選んでとにかくフォルダ選択のダイアログを開きます。
4. [ ] ファイルの種類のところで "Excelアドイン(*.xlam)"を選びます。
そうすると、格納フォルダ位置がアドインの置き場所として相応しいところに勝手に移動されます。
5. [ ] そのまま保存します。
6. [ ] EXCELの「開発」タブ（このタブの表示のさせ方は、ここで説明しなくても良いですよね？）のリボンUIを表示し、「EXCELアドイン」のボタンを押します。
7. [ ] 有効なアドインの中にFreemindusdmが表示されると思うので、チェックを入れます。<br>
これでこのアドインが使えるようになりました。
次に、リボンUIにボタンとして登録します。
8. [ ] 「ファイル」「オプション」「リボンのユーザー設定」の順に選択し、下図のUIを表示させます。必要に応じて「新しいタブ」ボタンを押してタブを作成したり、「新しいグループ」を作成したりしてください。タブやグループの名前は自由に設定してください。<br>
![Book1 - Excel 2019_07_26 13_09_39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246520/8864f391-4932-bd17-028d-edbf45b22bad.png)
9. [ ] 左上の「コマンドの選択」でマクロを選ぶと、先に登録したFreeMindUSDMが出てくると思うので、これを選択して「追加」ボタンを押します。
「OK」を押してオプションの設定ダイアログを閉じます。

以上で、左のFreeMindUSDMボタンが登録され、使用できるようになったはずです。

## 「あれっ、右側のFreeMindOpenの方は？」

これも全く同様の手順でFreeMindOpen.xlsmファイルを使って登録し、使用できるようになります。

#### 「FreeMindOpen.xlsmファイルが見当たらないのだけれど？」

これは先のFreeMindUSDM.xlsmファイルを複製して名前を変えて、少し修正すれば簡単に作れます。

1. [ ] 名前をFreeMindOpen.xlsmに変更したファイルを開いて、
2. [ ] 〔作業用記憶〕シートの「XSLソース」の右の欄(C2セル)に格納されているXSLTのプログラムを置き換え、
3. [ ] VBAのメインのマクロ名をFreemindopenに変更するだけで良いです。

「ははぁ、なるほど。そういうことか。」と気付かれた方も多いでしょう。

そうです。XSLTのプログラムをこの〔作業用記憶〕シートの「XSLソース」と名前の付けられたセル(C2のセルにこの名前が付けられている)に入れておけば、それを実行する仕組みになっています。

ですから、ご自分で好きなようにXSLTのプログラムを記述し、ここに格納すれば
それを実行するアドインが簡単に作れるということになります。

通常、FreeMindをインストールすると、その本体があるフォルダの配下にaccessoriesという名前のフォルダがあり、その中にいくつものXSLT用のプログラムが入っています。

mm2xls_utf8.xslが一般のFreeMindファイルをEXCELシートに変換するものなので、これを格納すると良いでしょう。

注意点として、XSLTのプログラムに日本語が含まれている場合はShift_JISにすること、
また、なぜかXSLTの整形のためのインデントが結果に入り込んでしまうことがあるので、改行や余計なスペースは取り除いてしまった方が無難です。

これは多くのエディタで簡単に処理できると思います。
XMLですから、特に以下のものでも簡単に処理できます。

- XMLEDITOR.NET
-- ※入手先 : [http://www.xmleditor.jp/](http://www.xmleditor.jp/)

# プログラム説明

プログラムは100行程度のもので、説明のコメントも入れてあるので、ここで詳しく説明する必要はないように思います。
ほとんどがファイル選択のUIや読み書きの処理です。
実際に変換する部分も一行の呼び出しで済んでしまいます。メインの処理Sub FreeMindUSDM()の中の以下の部分になります。

``` 
' XSLTを使用して変換元のFreeMind形式のファイル内容をXMLSS形式に変換する
xmlss = xdoc.transformNode(xstyle)
```

xdoc, xstyleは以下のように定義されたものになります。

    Dim xdoc As New MSXML2.DOMDocument60
    Dim xstyle As New MSXML2.DOMDocument60

xdocの方にFreeMindのソースを格納し、xstyleの方にXSLT用のプログラムを入れて、これで変換できます。

xmlssはと言えば、

    Dim xmlss As String

つまり結果は文字列として受け取れば良いだけです。