カミは死んだ

Paper Is Dead ... osz

Programmatic Visio Generation - ページ設定

はじめに

IronPythonからVisioファイルを自動生成の2回目です。今回はVisioファイルで図形を配置する前にやっておくべきページ設定を行ってみます。 しかしながら、こんなネタ、どなたかに需要があるのか全くわかりません。そもそも需要がないから自分が書いているのかもしれません...。

今回行うページ設定

寸法をインチに設定

Visioで図形を配置するときには、よくグリッドにスナップさせると思います。このグリッド線ですがページの倍率を変えると図形と上手く合わなくなることがありませんか?実際、前回自動生成したVisioファイルの図形もグリッドに上手くスナップしていません。

f:id:hassyy:20141123190826p:plain

これは経験上、ページの寸法設定がインチ以外のときに発生するようです。前回生成したVisioファイルの寸法設定は、ミリメートル、になっています(日本語設定されているからだと思います)。

f:id:hassyy:20141123185351p:plain

ということで、Visioファイル生成時に寸法をインチに設定してみます。

ページ余白をなくす。

古いVisioではページ全面にグリッドが配置されていたと思うのですが、Visio 2013ではページ余白設定部分にはグリッドが配置されず白抜きされています。これはページ設定のプリンターの設定にある余白の値が反映されているためのようです。ですがこのままだと、先に生成したVisioファイルでは、左下の座標原点に配置した図形が余白に被っています。

f:id:hassyy:20141123193022p:plain

ということで、Visioファイル生成時に余白を0に設定してみます。

IronPythonからVisioページ設定

IronPythonの記述からVisioページ設定をさわるにはどうすれば良いのでしょうか。これはVBAで指定するのと同様なことをIronPythonで書けば良いようです。具体的には、アクティブなページオブジェクトに対して適切なCellsSRCプロパティを設定すれば良いようです。

ページオブジェクト ?

前回のコードではアクティブページはpage変数で指定されていました。

page = visapp.ActivePage

CellsSRC ?

MSDNの説明はこちらです...が、よくわりません...osz。 Microsoft Office Visio 2003 SDKドキュメント CellsSRC プロパティ

どうやらCellsSRC(section, row, column) の3つの引数を適切に指定すればそのオブジェクトが備える各種プロパティを設定できるようです。

改めて、IronPythonからVisioページ設定

実際にVisioのページ設定を行うには、アクティブページが持つPageSheetに対してCellsSRCでプロパティを指定値を設定するようです。

寸法設定

# ページ設定の寸法をインチに指定
page.PageSheet.CellsSRC(1, 10, 4).FormulaU = "1 in"

ページ余白設定

# ページ余白を0インチに指定
# 左余白
page.PageSheet.CellsSRC(1, 25, 0).FormulaU = "0 in"
# 右余白
page.PageSheet.CellsSRC(1, 25, 1).FormulaU = "0 in"
# 上余白
page.PageSheet.CellsSRC(1, 25, 2).FormulaU = "0 in"
# 下余白
page.PageSheet.CellsSRC(1, 25, 3).FormulaU = "0 in"

これらを設定するとで、確かに、ページの端までグリッドがあり、図形がグリッドにスナップしたVisioファイルが生成できます。

f:id:hassyy:20141123230234p:plain

最後にここまでのソースコードを載せておきます。

# coding: UTF-8
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"

# ページ設定の寸法をインチに指定
page.PageSheet.CellsSRC(1, 10, 4).FormulaU = "1 in"
page.PageSheet.CellsSRC(1, 10, 5).FormulaU = "1 in"

# ページ余白を0インチに指定
# 左余白
page.PageSheet.CellsSRC(1, 25, 0).FormulaU = "0 in"
# 右余白
page.PageSheet.CellsSRC(1, 25, 1).FormulaU = "0 in"
# 上余白
page.PageSheet.CellsSRC(1, 25, 2).FormulaU = "0 in"
# 下余白
page.PageSheet.CellsSRC(1, 25, 3).FormulaU = "0 in"

今日はここまで

IronPythonVisioファイルのページ設定を行ってみました。ところで、今回のページ設定において、設定するプロパティに対応するCellsSRCの引数を何にすれば所望の設定が行えるのか、疑問に思ったかもしれません。次回はこのあたりを説明できればと思います。