カミは死んだ

Paper Is Dead ... osz

Programmatic Visio Generation

はじめのはじめ

思い立ったのでメモがてらブログをはじめます。

Visioファイルを自動生成したい

残念な人が使うベクタドローツールといえばMicrosoft Visioでしょう。MS-OFFICEツール群に支配された環境で使っている方も多いのではないでしょうか。

さてこのVisio、プログラム的にその中身を内容を自動生成したいと思うこともあるでしょう。ですが、Windowsプログラミングを全く知らない人にとって、その初めの一歩は非常に重たい気がします(自分もその一人であります)。

IronPythonによるVisioファイル自動生成

ではどうやってVisio自動生成するか。Google先生に尋ねてみるといくつか方法があるようです。

Windows PowerShellからVISIOファイルを自動制御したり、XML形式のVISIOファイル(.vdx)を生成するツールが提供されています。

ドキュメントも充実しているように見えるのですが、自分にはすぐに始められない印象でした(Windowsプログラミングを知っている人には簡単なのでしょう、きっと)。

なお、こちらのツールは、Visio 2010、および、2007に対応している一方、Visio 2013(から導入された .vsdx形式)には対応していないようです。

上記 Visio Automation と同じ方が主宰されているブログ viziblr の古い記事です。プログラム的にVISIOファイルを生成するためのHello World的なコードを、C#、F#、および、IronPythonの各言語で紹介しています。

Windowsプログラミングになじみがない≒VisualStudioを使う気がない、こんな自分にとっては軽量言語でWindowsプログラミングができそうなIronPythonを選択したいと思いました。

IronPythonVisio

というわけで、Visio Automation: Three Hello World Samples – C#, F#, and IronPythonで紹介されているIronPythonのサンプルを実行してみます。

IronPythonのインストール

IronPython本家サイトからダウンロードしてインストールすればOKです。 自分は現時点で安定版の安定版の2.7.4を入れました。

インストール後は、インストールフォルダにパスを通しておきましょう。

HelloWorldコード作成

先のサイトからコードを引用させて頂きます。 ⇒ ファイル名は勝手につけています。『import sys』『import system』は不要だったので削除しています。

hello_world.py

import clr
clr.AddReference("Microsoft.Office.Interop.Visio")
import Microsoft.Office.Interop.Visio
IVisio = Microsoft.Office.Interop.Visio
visapp = IVisio.ApplicationClass()
doc = visapp.Documents.Add("")
page = visapp.ActivePage
shape = page.DrawRectangle(0, 0, 1, 1)
shape.Text = "Hello World"

実行

コマンドプロンプトで先ほどのファイルを実行します。 IronPythonのインストールフォルダにパスが通っていれば、下記で実行できると思います。

$ ipy.exe hello_world.py

Visioファイルの生成

上記を実行するとVisioが起動し以下のファイルができると思います。

f:id:hassyy:20141122210851p:plain

このコードの中身はこれから勉強してきます。 取り急ぎとしては:

  • レクタングルシェイプが左下の座標原点 (0,0) から対角座標 (1,1) の位置に生成されます。
  • シェイプのテキストが "Hello World" になります。

今日はここまで

IronPythonを使うことで、結構簡単に(?)Visioファイルを自動生成できることが分かりました。 次回以降コードのスタディを進めて、何か分かればブログ更新していきます。