CATDrawingのテーブルをExcelファイルに出力|CATIAマクロの作成方法
今回はCATIAで作成したテーブルをExcelファイルに出力するマクロを紹介していきます。
CATIAとExcelを連携させるマクロのなかでも、Excelと連携するメリットが非常に感じられるマクロとなっています。
Excelとの連携方法は下記ページで解説しているので先に一読しておくことをオススメします。
マクロの機能
タイトルのとおり本ページで紹介するマクロの機能は
「CATDrawingのテーブルをExcelファイルに書き出す」というものです。
このマクロの主な目的はCATDrawingでの”テーブル作成の効率化”です。
CATIAで作成するテーブルはご存知の通り、あまり使い勝手が良いとはいえません。
そこで、「テーブルをExcelに出力することでより簡単にテーブルを編集できるようにしよう」という目的のため作成したのが今回のマクロです。
※値を出力するだけのマクロなので以下の内容は非対応
フォント/フォントサイズ
行/列サイズ
罫線の線種
左揃え/中央揃え/右揃え
マージ(Excelでいうセルの結合) など
出力したExcelファイルは「ExcelファイルをCATDrawingのテーブルに出力」で紹介したマクロを使うことで新たにテーブルとして出力することもできます。
テーブルの作成とか修正がかなり楽になりそうですね!
サンプルコード
マクロのコードは下記のとおりです。
マクロ実行後に選択したテーブルの値を新規Excelファイルに書き出します。
※エラーが出る場合はおそらくExcelライブラリが読み込まれていません
詳しくは後述のコード解説「Excelの定義」の項を参照ください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
Sub CATMain() Dim DrwDOC As DrawingDocument If TypeName(CATIA.ActiveDocument) <> "DrawingDocument" Then MsgBox "このマクロはDrawingDocument専用です。" & vbLf & _ "ドラフティングワークベンチに切り替えて実行してください。" Exit Sub End If Set DrwDOC = CATIA.ActiveDocument Dim Excel As Object Set Excel = CreateObject("Excel.Application") Dim WB As Workbook Set WB = Excel.Workbooks.Add Dim WS As Worksheet Set WS = WB.Sheets(1) Dim SEL Set SEL = DrwDOC.Selection SEL.Clear Dim InputType(0) InputType(0) = "DrawingTable" Dim msg As String msg = "テーブルを選択してください。" Dim Status As String Status = SEL.SelectElement2(InputType, msg, False) If ((Status = "Cancel") Or (Status = "Undo")) Then WB.Close Exit Sub End If Dim MyTable Set MyTable = SEL.Item(1).Value Dim MaxRow As Integer Dim MaxCol As Integer MaxRow = MyTable.NumberOfRows MaxCol = MyTable.NumberOfColumns Dim i As Integer Dim j As Integer For i = 1 To MaxRow For j = 1 To MaxCol Dim TableTXT As String TableTXT = MyTable.GetCellString(i, j) WS.Cells(i, j).Value = TableTXT Next j Next i WS.Range(WS.Cells(1, 1), WS.Cells(MaxRow, MaxCol)).Borders.LineStyle = xlContinuous Excel.Visible = True End Sub |
本マクロは値を出力するだけなので幅やサイズなどの細かい調整は手動ですることになります。
上記コードにいろいろ書き足すことでフォントサイズの変更や行/列幅の変更も可能になります。
コード解説
本マクロのコードを上から順に部分ごとにわけて解説していきます。
アクティブドキュメントの定義
1 2 3 4 5 6 7 8 9 |
Dim DrwDOC As DrawingDocument If TypeName(CATIA.ActiveDocument) <> "DrawingDocument" Then MsgBox "このマクロはDrawingDocument専用です。" & vbLf & _ "ドラフティングワークベンチに切り替えて実行してください。" Exit Sub End If Set DrwDOC = CATIA.ActiveDocument |
まずはじめにアクティブドキュメントの定義をします。
今回のマクロはCATDrawingでのみ有効なものなので、アクティブドキュメントがCATDrawing以外の場合はTypeName関数を使った条件分岐でマクロを終了するようにしています。
条件分岐の先、つまりはアクティブドキュメントがCATDrawingの場合は変数「DrwDOC」にアクティブドキュメントを代入します。
Excelの定義
1 2 3 4 5 6 7 8 |
Dim Excel As Object Set Excel = CreateObject("Excel.Application") Dim WB As Workbook Set WB = Excel.Workbooks.Add Dim WS As Worksheet Set WS = WB.Sheets(1) |
CATIAマクロ上でExcel VBAを使用できるようにExcelを定義します。
上記コードでExcelが定義できない場合は、参照設定がされていない可能性があります。
詳しくは下記ページの「Excelマクロのライブラリを読み込む」の項を一読ください。
Excelを定義後は「Workbooksオブジェクト」の「Addメソッド」を使い、ワークブックを1つ新規で作成します。(※作成したワークブックは画面には表示されません)
作成したワークブックの1つ目のシートを変数「WS」に代入します。
このWSにテーブルの値が出力されます。
出力元のテーブルを取得(ユーザー選択)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
Dim SEL Set SEL = DrwDOC.Selection SEL.Clear Dim InputType(0) InputType(0) = "DrawingTable" Dim msg As String msg = "テーブルを選択してください。" Dim Status As String Status = SEL.SelectElement2(InputType, msg, False) If ((Status = "Cancel") Or (Status = "Undo")) Then WB.Close Exit Sub End If Dim MyTable 'As DrawingTable Set MyTable = SEL.Item(1).Value |
次に出力元となるテーブルをユーザー選択で取得します。
マクロ実行中にユーザーが選択したオブジェクトを取得するには「Selectionオブジェクト」の「SelectElement2メソッド」を使います。
「SelectElement2メソッド」の使い方は下記ページで解説しているの併せて確認ください。
Excelにテーブルの値を出力
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
Dim MaxRow As Integer Dim MaxCol As Integer MaxRow = MyTable.NumberOfRows MaxCol = MyTable.NumberOfColumns Dim i As Integer Dim j As Integer For i = 1 To MaxRow For j = 1 To MaxCol Dim TableTXT As String TableTXT = MyTable.GetCellString(i, j) WS.Cells(i, j).Value = TableTXT Next j Next i |
Excelに書き出すため、はじめにテーブルの行と列の数を取得します。
テーブルの行数は変数「MaxRow」に、列数は変数「MaxCol」に代入されます。
(「DrawingTableオブジェクト」の「NumberOfRows/NumberOfColumnsプロパティ」を使用)
取得した行数と列数の数だけ、それぞれループを行います。
DrawingTableとExcelの番地の考え方は同じでどちらも「(行数,列数)」で表すことができます。
つまりループを使いDrawingTableの番地(i,j)の値をExcelの番地(i,j)に書き出すという処理を行えば、テーブルの値をすべてExcelに書き出すことができるという訳です。
アウトプット
1 2 3 |
WS.Range(WS.Cells(1, 1), WS.Cells(MaxRow, MaxCol)).Borders.LineStyle = xlContinuous Excel.Visible = True |
上記までのコードではテーブルの値をExcelに書き出しただけで、画面に表示すらされていない状態です。(裏で処理が行われているイメージ)
そのため書き出したExcelファイルを画面に表示する必要があります。
が、そのまえに罫線を引いてどこまでが出力されたのかを分かりやすくしておきます。
コードとしては上記の1行目ですが、言葉で表すと「(1,1)のセルから(テーブルの行数,テーブルの列数)のセルの範囲すべてに罫線を引く」という感じです。
最後に、書き出したExcelを画面に表示するため「Excel.Visible = True」と書きます。
まとめ
今回はCATIAで作成したテーブルをExcelに書き出す方法のについての内容でした。
今回紹介したマクロは値を書き出すだけだったため、行/列幅やフォントサイズ、マージなどには対応していませんでした。これらにも対応できるようにすればCATIAで作成したテーブルを見た目そのままにExcelに書き出すことができるのでぜひ挑戦してみて下さい。
個人的にはマージ(エルの結合)は再現したかったのですが少し難しかったため、いったん値だけ書き出すマクロを紹介しました。マージについて理解できれば追記していこうと思います。
以下のページでは今回やった内容の逆の処理を行っているので、コチラも併せてどうぞ。
目次へ戻る