ボディー名と形状セット名をCSVファイルそして出力するマクロ|CATIAマクロの作成方法

今回の記事は「お問い合わせ」でいただいた内容です。
送って頂いた内容は以下のようなマクロです。

題名:
ボディ名形状セット名のcsv書き出し
 
マクロ案: 
パートデザインで、一次レベルのボディ名と形状セット名をCSVファイルに書き出したいです。

CSVファイルに書き出す方法はExcel VBAでもいくつか紹介されていますが、ここではCATIA VBAの「FileSytemオブジェクト」を使ってCSVファイルとして出力していきます。
サンプルコード内にも出てくる処理である”ファイルの作成や存在確認などの方法については「FileSytemオブジェクトページ」で解説しているので、詳しくはそちらを確認してください。

 

マクロの機能

今回作成したのはツリー第1階層にあるボディー/形状セット名をCSVファイル出力するマクロです。
具体的な機能は以下のとおりです。

  マクロの機能まとめ ・ツリー第1階層にあるボディーと形状セットの名前をCSVファイルとして出力する
・ファイル名はPart名 (※同名のファイルがある場合は上書きの確認をする)
ボディー名称、形状セット名称の順で出力
・出力後はCSVファイルを開く

 

サンプルコード

マクロのコードは以下のとおりです。
コード内の保存場所となる「saveDir」の中身は自身のものに書き換える必要があります。

 

コード解説

ドキュメント/パーツの定義

まずはじめにアクティブドキュメントの定義をします。
今回のマクロはCATPartでのみ有効なものなので、アクティブドキュメントがCATPart以外の場合はTypeName関数を使った条件分岐でマクロを終了するようにしています。

つまり、アクティブドキュメントがCATPartの場合のみ変数「doc」にアクティブドキュメントを代入し、マクロの処理を続けます。

アクティブドキュメントが定義できたらあわせてPartオブジェクトも定義します。
(Partオブジェクトとは仕様ツリーの1番上にある「Part1」のこと)
  

名称格納用配列の用意

つぎにボディーと形状セットの名称を格納しておくための配列を用意します。
配列の要素数はPartオブジェクト(pt)の「Bodies」「HybridBodies」の数だけそれぞれ用意します。
  

ボディー名/形状セット名取得

ボディーと形状セットの数だけ別々にループ処理をさせて、全てのボディー/形状セットの名称を先ほど用意した配列に格納します。
 

csv出力用文字列の作成

出力するcsvファイルの中身となるカンマ[,]で区切られた文字列を作成します。

初めに「csv」という変数に、bName内にある1番目の文字列(ボディーの名称)を入れます。
その後、ループ文を使いbName、hbNameの数だけ「, 名称」をcsvの後ろに追加していきます。

これにより「名称,名称,名称・・・,名称」というカンマ[,]で区切られた1行のテキストが完成します。
 

csv出力

次に「FileSytemオブジェクト」を使って先ほど作成した文字列をcsvファイルとして出力します。

「saveDir」「fileName」では「保存場所」「ファイル名」を指定し、
この2つを合体させ出力するファイルのパスとなる「savePath」を作ります。

このとき「savePath」に該当するファイルが存在した場合は、上書きするかしないかのメッセージが表示するようになっています。ファイルの存在を確認するには「FileSytemオブジェクト」の「FileExistsメソッド」を使います。

次に同オブジェクトの「CreateFileメソッド」を使い、csvファイルを作成します。
ただ、この時点では何も書かれていないただの空データです。

そこで「TextStreamオブジェクト」の「Writeメソッド」を使って、先ほど作成したカンマ区切りの文字列を空データに書き込みます。

 icon-code ファイルに書き出し 

Dim ts As TextStream
Set ts = csvFile.OpenAsTextStream(“ForWriting”)
ts.Write (csv)
ts.Close

「TextStreamオブジェクト」を定義する際は上記の通り「FileSytemオブジェクト」の「OpenAsTextStreamメソッド」を使い、引数として「ForWriting」という文字列を渡します。
これにより定義した「TextStreamオブジェクト」(ts)を使っての値の書き出しが可能になります。

また、出力後は同オブジェクトの「Closeメソッド」で”ファイルを閉じる”という処理も必要になるので注意しましょう。
 

出力フォルダを表示

最後に出力したcsvファイルを「Shell関数」を使って開きます。
Shell関数についてはExcelマクロでもよく使われ、多くの解説ページがあるためここでは割愛します。

 

まとめ

今回はツリー第1階層にあるボディー/形状セット名をCSVファイル出力するマクロについてでした。

大まかな流れとしては以下のような処理を行なっているだけです。

① ツリー第1階層にあるボディー/形状セット名をすべて配列内に格納 
② 配列内に入っている名前とカンマ[,]を使って1つのテキストを作成 
③ 空のcsvファイルを作成
④ 空のcsvファイルにテキストを書き出す。

基本的にCATIA VBAでフォルダ作成やファイル作成をする場合は、今回のように「FileSytemオブジェクト」を使います。Excel VBAの場合も同じような「FileSystemObjectオブジェクト(リンク先はMicrsoftページ)」というものを使ってファイル作成をします。

Excel VBAでよく使われる「FileSystemObjectオブジェクト」はCATIA VBAでも使うことができるので自身がやりやすい方を使うといいと思います。

 

サンプルマクロ集に戻る
目次へ戻る

 

 CATIAマクロを本気で勉強するなら

CATIA, CATIAマクロ, VBA

Posted by Lic