マリオネット・スクリプト解説講座

新着記事第73回「スクリプトでワークシートをつくる」

ArchitectLandmarkSpotlightDesigner2026

今回はPythonスクリプトを使用してデータベース行を含むワークシートを作成する方法を解説します。

VectorScriptおよびPythonスクリプトにはワークシートリソースの作成、セルの値の編集、レイアウトの設定等のワークシートを管理するAPIが用意されています。今回はデータベース行を使用して図面上のプラグインオブジェクトのパラメータを集計する簡単なワークシートを作成していきます。

最初に、集計したいオブジェクトが配置されたファイルを用意してください。ここではプラグインのBIM拡張パッケージを使用して作成した軸組のデータ使用します。このファイルを使用して図面上の柱・間柱オブジェクトの数量とそれぞれのサイズを一覧表示するワークシートを作成していきます。

73-1. ワークシートを作成する

ワークシートの名前と行数・列数を指定してワークシートを作成します。

2行x3列のワークシート「柱の集計」を作成する:

ws = vs.CreateWS( '柱の集計', 2, 3 )

指定したワークシート名前がすでに使用されていると作成に失敗します。作成前にチェックして、すでに使用されている場合は該当のオブジェクトを削除します。

ws = vs.GetObject( '柱の集計' )
if ws != vs.Handle(0):
    vs.DelObject( ws )

ws = vs.CreateWS( '柱の集計', 2, 3 )

この時点で空白のワークシートが作成されていますので、ShowWSで表示して確認します。

ws = vs.GetObject( '柱の集計' )
if ws != vs.Handle(0):
    vs.DelObject( ws )

ws = vs.CreateWS( '柱の集計', 2, 3 )

vs.ShowWS( ws, True )

おまじない

新しく作成したワークシートは”自動で再計算”がONになっています。

自動計算がONの状態でワークシートの内容を編集すると、都度計算されて処理に時間ががかかります。ワークシートを編集している間は自動計算をOFFにして、最後に自動計算をONに復帰する処理を入れておきましょう。再計算の処理も忘れずに入れます。

ws = vs.GetObject( '柱の集計' )
if ws != vs.Handle(0):
    vs.DelObject( ws )

ws = vs.CreateWS( '柱の集計', 2, 3 )

vs.SetWSAutoRecalcState(ws, False)


### ワークシートを編集する処理 ###


vs.SetWSAutoRecalcState(ws, True)
vs.RecalculateWS( ws )

vs.ShowWS( ws, True )

73-2. ヘッダー行

ワークシートのセルにデータを入力していきます。まずはパラメータの名前を表示するヘッダー行を編集します。ここでは柱・間柱オブジェクトから参照するパラメータと計算する値の名前を入力します。

    • 断面の幅
    • 断面の奥行き
    • 柱の高さ

セルの位置を行と列の番号で指定して、入力するデータ(または式)を指定します。入力するセルの範囲を、上の番号、左の番号、下の番号、右の番号の順に指定しますが、1つのセルに入力する場合は左右と上下の位置に同じ番号を入れます。

ws = vs.GetObject( '柱の集計' )
if ws != vs.Handle(0):
    vs.DelObject( ws )

ws = vs.CreateWS( '柱の集計', 2, 3 )

vs.SetWSAutoRecalcState(ws, False)


vs.SetWSCellFormulaN( ws, 1, 1, 1, 1, "断面の幅" )
vs.SetWSCellFormulaN( ws, 1, 2, 1, 2, "断面の高さ" )
vs.SetWSCellFormulaN( ws, 1, 3, 1, 3, "柱の高さ" )


vs.SetWSAutoRecalcState(ws, True)
vs.RecalculateWS( ws )

vs.ShowWS( ws, True )

73-3. データベース行

柱・間柱を集計するためのデータベース行をワークシートの2行目に作成します。

ここでは「データベースヘッダを表示」を無効にして非表示にします。次のコードを追加します。ワークシートの設定と対応する番号はDevelopersサイトで確認することができます。

vs.SetObjectVariableBoolean( ws, 82, False )

“=DATABASE”の記述で始まるデータベース式を0列目に入力することでデータベース行を作成することができます。

vs.SetWSCellFormulaN( ws, 2, 0, 2, 0, "=DATABASE(検索条件式)" )

ここでは図面上の柱・間柱オブジェクトを検索する条件式を入力します。

ws = vs.GetObject( '柱の集計' )
if ws != vs.Handle(0):
    vs.DelObject( ws )

ws = vs.CreateWS( '柱の集計', 2, 3 )

vs.SetWSAutoRecalcState(ws, False)


vs.SetWSCellFormulaN( ws, 1, 1, 1, 1, "断面の幅" )
vs.SetWSCellFormulaN( ws, 1, 2, 1, 2, "断面の高さ" )
vs.SetWSCellFormulaN( ws, 1, 3, 1, 3, "柱の高さ" )

vs.SetObjectVariableBoolean( ws, 82, False )

vs.SetWSCellFormulaN( ws, 2, 0, 2, 0, "=DATABASE(PON='柱・間柱')" )


vs.SetWSAutoRecalcState(ws, True)
vs.RecalculateWS( ws )

vs.ShowWS( ws, True )

条件にヒットした柱・間柱の数だけワークシートに行が追加されます。

検索条件式を作る

図形選択マクロではダイアログボックで条件を入力して、検索条件式をPython形式で出力することができます。図形選択マクロのオプションで「Python Scriptを作成」をONにしてください。

作成されたPythonのスクリプトリソースを編集画面で開いて、検索条件式部分をコピーして使用することできます。

条件式によってはシングルとダブルのクオーテーションが入れ子になって使用される場合があります。この場合、検索条件式を変数に入れたあとSetWSCellFormulaNに入力することで、クオーテーション文字のエスケープをする必要がなくなります。

criteria = "=DATABASE((STO='1F') & (PON='柱・間柱') & ('柱・間柱'.'StdLength'='3000') & (OV))"
vs.SetWSCellFormulaN( ws, 2, 0, 2, 0, criteria )

73-4. パラメータの参照

柱・間柱のパラメータを参照してデータベース行に情報を表示します。「=’オブジェクトのユニバーサル名’.’パラメータ名’」の組み合わせで、列に式を入力します。

ws = vs.GetObject( '柱の集計' )
if ws != vs.Handle(0):
    vs.DelObject( ws )

ws = vs.CreateWS( '柱の集計', 2, 3 )

vs.SetWSAutoRecalcState(ws, False)


vs.SetWSCellFormulaN( ws, 1, 1, 1, 1, "断面の幅" )
vs.SetWSCellFormulaN( ws, 1, 2, 1, 2, "断面の高さ" )
vs.SetWSCellFormulaN( ws, 1, 3, 1, 3, "柱の高さ" )

vs.SetObjectVariableBoolean( ws, 82, False )

vs.SetWSCellFormulaN( ws, 2, 0, 2, 0, "=DATABASE(PON='柱・間柱')" )

vs.SetWSCellFormulaN( ws, 2, 1, 2, 1, "='柱・間柱'.'Width'" )
vs.SetWSCellFormulaN( ws, 2, 2, 2, 2, "='柱・間柱'.'Depth'" )
vs.SetWSCellFormulaN( ws, 2, 3, 2, 3, "='柱・間柱'.'Height'" )


vs.SetWSAutoRecalcState(ws, True)
vs.RecalculateWS( ws )

vs.ShowWS( ws, True )

データベース行の各列にパラメータの値が表示されました。

73-5. ヘッダー行の見た目を整える

セルの書式を変更すると、そのあとに追加した行や列にも書式が引き継がれてしまうので、書式の変更は最後にやるのがおすすめです。

水平垂直の揃え

vs.SetWSCellAlignment( ws, 1, 1, 1, 3, 2)
    • 1=左揃え
    • 2=中央揃え
    • 3=右揃え
vs.SetWSCellVertAlignment( ws, 1, 1, 1, 3, 3 )
    • 1=上揃え
    • 2=中央揃え
    • 3=下揃え

太字に変更

fontIndex, size, style = vs.GetWSCellTextFormat( ws, 1, 1 )
vs.SetWSCellTextFormat( ws, 1, 1, 1, 3, fontIndex, size, 1 )

現在の書式設定を取得して、スタイルだけを太字(1)に変更する方法です。

背景をグレーに塗りつぶし

vs.SetWSCellFill( ws, 1, 1, 1, 3, 1, 245, 245, 0 )

塗りつぶしの色はカラーパレットの番号で指定します。ここでは245番の薄いグレーのを指定しています。

下部に枠線を描画

vs.SetWSCellBottomBN( ws, 1, 1, 1, 3, 2, 10, 255 )

下だけでなくセルごとに上下左右の枠線を描画することができます。

スクリプト全体を示します。

ws = vs.GetObject( '柱の集計' )
if ws != vs.Handle(0):
    vs.DelObject( ws )

ws = vs.CreateWS( '柱の集計', 2, 3 )

vs.SetWSAutoRecalcState(ws, False)


vs.SetWSCellFormulaN( ws, 1, 1, 1, 1, "断面の幅" )
vs.SetWSCellFormulaN( ws, 1, 2, 1, 2, "断面の高さ" )
vs.SetWSCellFormulaN( ws, 1, 3, 1, 3, "柱の高さ" )

vs.SetObjectVariableBoolean( ws, 82, False )

vs.SetWSCellFormulaN( ws, 2, 0, 2, 0, "=DATABASE(PON='柱・間柱')" )

vs.SetWSCellFormulaN( ws, 2, 1, 2, 1, "='柱・間柱'.'Width'" )
vs.SetWSCellFormulaN( ws, 2, 2, 2, 2, "='柱・間柱'.'Depth'" )
vs.SetWSCellFormulaN( ws, 2, 3, 2, 3, "='柱・間柱'.'Height'" )

vs.SetWSCellAlignment( ws, 1, 1, 1, 3, 2)
vs.SetWSCellVertAlignment( ws, 1, 1, 1, 3, 3 )
fontIndex, size, style = vs.GetWSCellTextFormat( ws, 1, 1 )
vs.SetWSCellTextFormat( ws, 1, 1, 1, 3, fontIndex, size, 1 )
vs.SetWSCellFill( ws, 1, 1, 1, 3, 1, 245, 245, 0 )
vs.SetWSCellBottomBN( ws, 1, 1, 1, 3, 2, 10, 255 )

vs.SetWSAutoRecalcState(ws, True)
vs.RecalculateWS( ws )

vs.ShowWS( ws, True )

実行するとヘッダー行の見た目に反映されます。

この機能を利用できる製品

Architect

Vectorworks Architect

建築設計や内装、ディスプレイデザインに対応した先進的なBIM・インテリア設計支援機能、拡張機能、さらには豊富な建築向けのデータライブラリを搭載した建築/内装業界向け製品
詳細情報 購入ページ

Landmark

Vectorworks Landmark

地形モデルや多彩な植栽、灌水設備計画等に対応するランドスケープデザイン機能、さらには豊富な造園向けのデータライブラリを搭載した都市計画/造園業界向け製品
詳細情報 購入ページ

Spotlight

Vectorworks Spotlight

ステージプランニングやライティング計画に対応した先進的な舞台照明計画支援機能、さらには各種メーカー製のトラスや照明機材、音響機器等の豊富なデータライブラリを搭載したエンタテインメント業界向け製品
詳細情報 購入ページ

Designer

Vectorworks Design Suite

専門分野別(建築設計/ディスプレイデザイン、ランドスケープデザイン、ステージデザイン&スポットライトプランニング)の設計支援機能、拡張機能、さらには豊富なデータライブラリを搭載した最上位の製品
詳細情報 購入ページ