ExcelファイルをCATDrawingのテーブルに出力|CATIAマクロの作成方法

今回はExcelで作成した表をCATDrawingのテーブルをに出力するマクロを紹介していきます。
CATIAとExcelを連携させるマクロのなかでも、Excelと連携するメリットが非常に感じられるマクロとなっています。

Excelとの連携方法は下記ページで解説しているので先に一読しておくことをオススメします。

 

マクロの機能

タイトルのとおり本ページで紹介するマクロの機能は
「ExcelファイルをCATDrawingのテーブルに書き出す」というものです。

このマクロの主な目的はCATDrawingでの”テーブル作成の効率化”です。
CATIAで作成するテーブルはご存知の通り、あまり使い勝手が良いとはいえません。
そこで、「Excelで作成した表をテーブルとして書き出すことでより簡単にテーブルを編集できるようにしよう」という目的のため作成したのが今回のマクロです。

 icon-wrench マクロの機能まとめ ・選択したExcelファイルの表の値をテーブルに出力
・出力先はアクティブなビューもしくはシートの原点
値を出力するだけのマクロなので以下の内容は非対応
 フォント/フォントサイズ
 行/列サイズ
 罫線の線種
 左揃え/中央揃え/右揃え
 マージ(Excelでいうセルの結合) など

出力したテーブルはCATDrawingのテーブルをExcelファイルに出力で紹介したマクロを使うことで再びExcelファイルとして出力することもできます。

今回のマクロと上記のマクロを使えば
テーブルの作成とか修正がかなり楽になりそうですね!

 

サンプルコード

マクロのコードは下記のとおりです。
マクロ実行後に選択したExcelファイルの値を新規テーブルに書き出します。
※エラーが出る場合はおそらくExcelライブラリが読み込まれていません
 詳しくは後述のコード解説「Excelの定義」の項を参照ください。

本マクロは値を出力するだけなので幅やサイズなどの細かい調整は手動ですることになります。
上記コードにいろいろ書き足すことでフォントサイズの変更や行/列幅の変更も可能になります。

 

コード解説

本マクロのコードを上から順に部分ごとにわけて解説していきます。
 

アクティブドキュメントの定義

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

条件分岐の先、つまりはアクティブドキュメントがCATDrawingの場合は変数「DrwDOC」にアクティブドキュメントを代入します。
 

Excelの定義

CATIAマクロ上でExcel VBAを使用できるようにExcelを定義します。
上記コードでExcelが定義できない場合は、参照設定がされていない可能性があります
詳しくは下記ページの「Excelマクロのライブラリを読み込む」の項を一読ください。

 
Excelを定義後は「GetOpenFilenameメソッド」を使って、
出力元となるExcelファイル(ブック)をユーザーに選択させ、変数「WB」として代入します。

変数「WB」を定義したら、WBの1つ目のシートを変数「WS」に代入します。
このWSに書かれている値がテーブルに出力されます。
 

Excelファイルの最大行数/列数を取得

出力元となるExcelの表のサイズ、つまりは値が入力されている最大行数/列数を取得します。

これは「Findメソッド」を使うことで簡単に取得することができます。
「Findメソッド」を使った入力範囲の取得はExcelマクロでよく使われ、多くの情報が存在するのでここでは割愛します。(詳しくは「Excelマクロ Findメソッド」等で検索してみて下さい)

取得した値はそれぞれ、最大行数は「MaxRow」、最大列数は「MaxCol」に代入します。
 

CATDrawingに新規テーブルを作成

次に先ほど取得したExcelファイルの最大行数/列数のサイズのテーブルを作成します。

まずは、はじめに取得したアクティブドキュメント(DrawingDocument)を使いアクティブなシート、アクティブなビューを順に定義します。

つぎに定義したアクティブビューに
「Tablesコレクション」の「Addメソッド」を使って、新規のテーブルを作成します。

icon-code Tablesコレクション[Addメソッド] 

Dim MyTable As DrawingTable
Set MyTable = VIW.Tables.Add(X座標,Y座標,行数,列数,セル高さ,セル幅)

今回のコードでは「.Add(0#, 0#, MaxRow, MaxCol, 4.6, 17.5)」と書いているので、
アクティブビューのX座標=0,Y座標=0の位置にMaxRow×MaxColセル高さ4.6mm/幅17.5mmのテーブルが作成されます。

MaxRowMaxColは先ほど取得した出力元となるExcelの表サイズ。
 セル高さ/幅が整数の場合はシャープ[#]を付けて入力。(10mmの場合は「10#」と入力)

これで出力元のExcelと同じサイズのテーブルができたので、あとは値を入力していくだけです。
 

値の入力

Excelの各セルから値を読み取り、テーブルの該当するセルに値を書き出していきます。

値は取得したMaxRow×MaxCol回のループで、1つずつ書き出していきます。
DrawingTableとExcelの番地の考え方は同じでどちらも「(行数,列数)」で表すことができます。

つまりループを使いExcelの番地(i,j)の値をDrawingTableの番地(i,j)に書き出すという処理を行えば、Excelの値をすべてテーブルに書き出すことができるという訳です。

テーブルへの値の入力は「DrawingTableオブジェクト」の「SetCellStringメソッド」を使います。

icon-code SetCellStringメソッド

Dim MyTable As DrawingTable
MyTable.SetCellString 列番,行番, 入力する値

 

まとめ

今回はExcelで作成した表をCATIAのテーブルに書き出す方法のについての内容でした。

今回紹介したマクロは値を書き出すだけだったため、行/列幅やフォントサイズ、マージなどには対応していませんでした。これらにも対応できるようにすればCATIAで作成したテーブルを見た目そのままにExcelに書き出すことができるのでぜひ挑戦してみて下さい。

個人的にはマージ(エルの結合)は再現したかったのですが少し難しかったため、いったん値だけ書き出すマクロを紹介しました。マージについて理解できれば追記していこうと思います。

以下のページでは今回やった内容の逆の処理を行っているので、コチラも併せてどうぞ。

 
目次へ戻る
 

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

2020年6月11日CATIA, CATIAマクロ

Posted by Lic