Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

動機

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

19059822_312671672506266_1437631617800308988_n.jpg

手順概要

  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 レイアウトを作成する

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

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

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

全体を上寄せに

<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を残しておけば、中央揃えのツリーになる

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

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

などにあるtype="roundRect"type="rect"に変更(2箇所)。

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

<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に

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

などにあるval="5"val="9"に変更(3箇所)。

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

layoutHeader1.xmlをいじる

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

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をコピー

実際の作業

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

段階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が便利そうであるが、アドインがうまく使えなくて挫折。

参考サイト

Office 2007 および Office 2010 向けの Office Open XML を使用して、ユーザー設定の SmartArt レイアウトを作成する

the 2007 Microsoft Office system でカスタムスマートアート (Custom SmartArt) を作成する

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

hann-solo
こころ(だけ)はコーダー
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away