【コンサル限定？】標準のSmartArtを少し変えて、イシューツリー（ロジックツリー）を手軽に書けるようにしたい


# 動機

コンサルタントなので、ツリー（イシューツリー、ロジックツリー）をよく書く。
パワーポイントのグラフィックは、なるべく自作せずにSmartArtで済ませることにしているのだが（再現性を持たせるため）、ツリーを書くのに適したものがなくて困っていた。
で、作ってみた。

![19059822_312671672506266_1437631617800308988_n.jpg](https://qiita-image-store.s3.amazonaws.com/0/184128/35c13fac-3c8c-93d8-ee74-3254b1ddb25e.jpeg)

> わたし自身いまでも便利につかっており、記事もコンスタントに見ていただいているようですので、[`glox`ファイルのダウンロードリンクを追加](#gloxファイルのダウンロードリンク追加)しました（2021-08-23）

# 手順概要

1. 作りたいものに近いSmartArtから、レイアウト定義を抽出する（今回は階層構造 > 横方向階層）
2. サニタリングし、変えたいところを変える（layout1.xml）
3. 説明文などを変え（layoutHeader1.xml）.gloxファイルを生成する
4. テンプレートフォルダに.gloxを入れる

以下、要点に絞って思い出せる程度に記録。


# 1. レイアウト定義の抽出

* パワーポイントで新規書類作成、白紙のスライドのみにし、必要なSmartArtを挿入、保存
* パワーポイント書類（例えば、プレゼンテーション1.pptx）の拡張子を.zipに変える
* zipを解凍すると、xmlが取り出せるようになる。ppt > diagrams > layout1.xmlとlayoutHeader1.xmlを触ることになる


# 2. サニタリングし、変えたいところを変える（layout1.xml）

## 先ずはサニタリング

下記のサイトの「.gloxファイル用にlayout1.xmlファイルを編集するには」を読んで、layout1.xmlをきれいにする。

[Office 2007 および Office 2010 向けの Office Open XML を使用して、ユーザー設定の SmartArt レイアウトを作成する](https://msdn.microsoft.com/ja-jp/library/office/gg583880(v=office.14).aspx)


ただしこの2つだけやって、他は省略。

* `dgm:`を消す
* レイアウト定義タグの`:dgm`を消す


---

今回変えたところは下記の通り。

## 全体を上寄せに

```XML
<else name="Name7">
	<alg type="hierRoot">
		<param type="hierAlign" val="rCtrCh"/>
	</alg>
</else>
```

などにある`val="rCtrCh"`を`val="rT"`に変更（2箇所）。
`val="lCtrCh"`を`val="lT"`に変更（2箇所）。

※上寄せをせずにrCtrCh/lCtrChを残しておけば、中央揃えのツリーになる


## 図形を「正方形/長方形」に

```XML
<alg type="tx"/>
<shape xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" type="roundRect" r:blip="">
```

などにある`type="roundRect"`を`type="rect"`に変更（2箇所）。


## コネクタを「カギ線コネクタ」に

```XML
<alg type="conn">
	<param type="dim" val="1D"/>
	<param type="begPts" val="midR"/>
	<param type="endPts" val="midL"/>
	<param type="endSty" val="noArr"/>
</alg>
```

のパラメータを追加（2箇所）。
`<param type="connRout" val="bend"/>`


## 最低フォントサイズを9ptに

```XML
<ruleLst>
	<rule type="primFontSz" val="5" fact="NaN" max="NaN"/>
</ruleLst>
```

などにある`val="5"`を`val="9"`に変更（3箇所）。


# 3. 説明文などを変え（layoutHeader1.xml）、.gloxファイルを生成する

## layoutHeader1.xmlをいじる

[MSDN マガジンのバックナンバーとダウンロード](https://msdn.microsoft.com/ja-jp/magazine/ee310108.aspx)　にて、2007年02月号をダウンロードし、chmファイルを適当なツールを用いてhtmlに変換し、「進化したアート2007 Office System でカスタムの SmartArt グラフィックを作成する」という記事を取り出し、SmartArtテンプレートファイル（MSDNExample.glox）をダウンロードする。

[SmartArt2007_02.exe](http://download.microsoft.com/download/f/2/7/f279e71e-efb0-4155-873d-5554a0608523/SmartArt2007_02.exe)

（ここが一番大変だったかも）

MSDNExample.gloxの拡張子を.zipに変えて解凍する。解凍してできたフォルダを「issuetree.glox.zip」と名前を変えて、解凍し、issuetree_folderと名付ける。issuetree_folder > diagrams > layoutHeader1.xmlをいじる。

* layoutDefHdrのuniqueIdを変える
* `<title val=""/>`を記入。これがタイトルになる
* `<desc val=""/>`を記入。これが説明文になる
* `<cat type="other" pri="10000"/>`は変更しなかった

## .gloxファイルを生成する

* issue tree_folder > diagrams > layout1.xmlを、上記の2.で作ったlayout1.xmlと差し替える
* issue tree_folder　に入り、`_res` `diagrams` `[Content_Types.xml]`の3つを選択し、右クリック > 送る > 圧縮（zip形式）フォルダー　を選択
* できたzipファイルの名前を「issue tree_top.glox」に変更


# 4. テンプレートフォルダに.gloxを入れる

* Windowsの場合は`C:\Users\[user name]\AppData\Roaming\Microsoft\Templates\SmartArt Graphics`
* Macの場合は`/Users/[user name]/Library/Application Support/Microsoft/Office/SmartArt Graphics`
にissue tree_top.gloxをコピー

## gloxファイルのダウンロードリンク【追加】

[SmartArtでイシューツリー（ロジックツリー）を作成 - Releases - GitHub](https://github.com/hnsol/210823_issuetree/releases/tag/v1.0)

- issuetree_top.glox　⇒　上寄せ版
- issuetree_ctr.glox　⇒　中央寄せ版

# 実際の作業

実際には試行錯誤しながら開発していた。

段階1：パワポを直接いじる（テンプレートまで作らない）

1. 新規パワポ（SmartArtオブジェクトが一つだけのもの）を作成し、パワポをzipにして解凍
2. 解凍したフォルダ内のlayout1.xmlをいじる
3. 圧縮、リネームし、パワポのSmartArtオブジェクトが変わっていることを確認

段階2：テンプレートにしていじる

1. 新規パワポ、zip解凍までは同じ。layout1.xmlは抜き出しておく
2. MSDNExample.gloxをzip解凍、生成したフォルダに適当な名前（issuetree_test）をつける
3. issuetree_testフォルダ下のlayout1.xmlを1.で抜き出したlayout1.xmlと差し替え
4. issuetree_testフォルダ下のlayout1.xmlをいじる
5. zip圧縮、issuetree.gloxなどにリネーム、テンプレートフォルダに格納、パワポ起動し動作確認（繰返し）
6. layout1.xmlが収束したのちに、layoutHeader1.xmlをいじる
7. zip圧縮、issuetree.gloxなどにリネーム、テンプレートフォルダに格納、パワポ起動し動作確認（繰返し）


# その他（わからなかったこと）

Visual Studioは使えるのか？　[Open XML Package Editor for Visual Studio](https://marketplace.visualstudio.com/items?itemName=ChrisRae.OpenXMLPackageEditorforVisualStudio)が便利そうであるが、アドインがうまく使えなくて挫折。


# 参考サイト

[Office 2007 および Office 2010 向けの Office Open XML を使用して、ユーザー設定の SmartArt レイアウトを作成する](https://msdn.microsoft.com/ja-jp/library/office/gg583880(v=office.14).aspx)

[the 2007 Microsoft Office system でカスタムスマートアート (Custom SmartArt) を作成する]
(https://blogs.msdn.microsoft.com/tsmatsuz/2007/03/26/the-2007-microsoft-office-system-custom-smartart/)

[MSDN マガジンのバックナンバーとダウンロード](https://msdn.microsoft.com/ja-jp/magazine/ee310108.aspx)　⇒　2007年02月号をダウンロードし、chmファイルを適当なツールを用いてhtmlに変換し、「進化したアート2007 Office System でカスタムの SmartArt グラフィックを作成する」という記事を取り出す