カミは死んだ

Paper Is Dead ... osz

Programmatic Visio Generation - CellsSRC設定の関数化

はじめに

今回はCellsSRCの設定を関数化してみます。たいした内容ではありません。 予定していた、Visioファイル自動生成の目的、はまたの機会にします。

CellsSRCの設定おさらい

マクロの記録から得たVBAコードを元にIronPythonコードを書いたいました。 ページの余白設定するVBAコードはこんな感じでした。

Application.ActivePage.PageSheet.CellsSRC(visSectionObject, visRowPrintProperties, visPrintPropertiesLeftMargin).FormulaU = "0 in"
Application.ActivePage.PageSheet.CellsSRC(visSectionObject, visRowPrintProperties, visPrintPropertiesRightMargin).FormulaU = "0 in"
Application.ActivePage.PageSheet.CellsSRC(visSectionObject, visRowPrintProperties, visPrintPropertiesTopMargin).FormulaU = "0 in"
Application.ActivePage.PageSheet.CellsSRC(visSectionObject, visRowPrintProperties, visPrintPropertiesBottomMargin).FormulaU = "0 in"

ここで、CellsSRCの引数の値はこんなでした。これらは、VBA上でDebug.Printして確認していました。

visSectionObjecti=1
visRowPrintProperties=25
visPrintPropertiesLeftMargin=0
visPrintPropertiesRighttMargin=1
visPrintPropertiesTopMargin=2
visPrintPropertiesBottomMargin=3

これをIronPythonで書くとこうでした。

# Prepare ActivePave Object as "page"
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

# Set Page Margin
page.PageSheet.CellsSRC(1, 25, 0).FormulaU = string_value 
page.PageSheet.CellsSRC(1, 25, 1).FormulaU = string_value 
page.PageSheet.CellsSRC(1, 25, 2).FormulaU = string_value 
page.PageSheet.CellsSRC(1, 25, 3).FormulaU = string_value 

CellsSRC設定の関数化

これを関数化します。これで、CellsSRCの引数の値を気にせず設定処理ができます。

def set_page_margin(page, value):
    string_value = str(value) + " in"
    page.PageSheet.CellsSRC(1, 25, 0).FormulaU = string_value 
    page.PageSheet.CellsSRC(1, 25, 1).FormulaU = string_value 
    page.PageSheet.CellsSRC(1, 25, 2).FormulaU = string_value 
    page.PageSheet.CellsSRC(1, 25, 3).FormulaU = string_value 

将来役に立つかもしれないので、VBAコードとの対応をコメントに入れて完成とします。

## Set Page Margin 
#  Reference VBA Code:
#  Application.ActivePage.PageSheet.CellsSRC(visSectionObject, visRowPrintProperties, visPrintPropertiesLeftMargin).FormulaU = "0 in"
#  Application.ActivePage.PageSheet.CellsSRC(visSectionObject, visRowPrintProperties, visPrintPropertiesRightMargin).FormulaU = "0 in"
#  Application.ActivePage.PageSheet.CellsSRC(visSectionObject, visRowPrintProperties, visPrintPropertiesTopMargin).FormulaU = "0 in"
#  Application.ActivePage.PageSheet.CellsSRC(visSectionObject, visRowPrintProperties, visPrintPropertiesBottomMargin).FormulaU = "0 in"
#  where:
#   visSectionObjecti=1
#   visRowPrintProperties=25
#   visPrintPropertiesLeftMargin=0
#   visPrintPropertiesRighttMargin=1
#   visPrintPropertiesTopMargin=2
#   visPrintPropertiesBottomMargin=3
#  @param page ActivePage to be set the value
#  @param value Value in inch to be set to the ActivePage. Specify RAW value.
def set_page_margin(page, value):
    string_value = str(value) + " in"
    page.PageSheet.CellsSRC(1, 25, 0).FormulaU = string_value 
    page.PageSheet.CellsSRC(1, 25, 1).FormulaU = string_value 
    page.PageSheet.CellsSRC(1, 25, 2).FormulaU = string_value 
    page.PageSheet.CellsSRC(1, 25, 3).FormulaU = string_value 

今日はここまで

こんな感じで自分の必要な設定をどんどん関数化していけるかと思います。ある程度たまったらライブラリ化していきたいかな、どうかな。