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
今日はここまで
こんな感じで自分の必要な設定をどんどん関数化していけるかと思います。ある程度たまったらライブラリ化していきたいかな、どうかな。