こちらの続きです。
2D属性リンクを扱いたい3 - C#ATIA
今直ぐにでも使いたく時間かけていられない為、現状の小道具を
生かすことにします。
属性リンクを使用するのは、単なるテキストではなくテーブルなんです。
(更に一歩ハードルが高いんです)
リンク情報は前回のもの単体で取得できるので、付き合わせる為に
DrawingTable内のDrawingTextのオブジェクト名をCSVで吐き出す
マクロを作ります。
'vba using-'KCL0.0.12' by Kantoku 'DrawTable内のDrawTxtのオブジェクト名と値を書き出す Sub CATMain() 'ドキュメントのチェック If Not CanExecute("DrawingDocument") Then Exit Sub Dim dDoc As DrawingDocument Set dDoc = CATIA.ActiveDocument 'エクスポートパス '本当は一度保存しているかチェックすべき Dim exppath As String exppath = GetExpPath(dDoc.FullName) 'テーブル選択 Dim msg As String msg = "テーブル選択" Dim dt As DrawingTable Set dt = KCL.SelectItem(msg, "DrawingTable") If dt Is Nothing Then Exit Sub 'テーブル情報 Dim data As Variant data = GetTableData(dt) 'エクスポート Call KCL.WriteFile(exppath, Join(data, vbCrLf)) MsgBox "done" End Sub Private Function GetExpPath( _ ByVal drwpath As String) As String Dim ary As Variant ary = KCL.SplitPathName(drwpath) Dim tmp As String tmp = ary(0) & "\" & ary(1) & "_table" & ".csv" GetExpPath = KCL.GetNewName(tmp) End Function Private Function GetTableData( _ ByVal dt As DrawingTable) As Variant Dim rowcnt As Long rowcnt = dt.NumberOfRows Dim clmcnt As Long clmcnt = dt.NumberOfColumns Dim cells() As String ReDim cells(rowcnt - 1) Dim tmp() As String Dim i As Long, j As Long Dim drwtxt As DrawingText For i = 1 To rowcnt ReDim tmp(clmcnt - 1) For j = 1 To clmcnt Set drwtxt = dt.GetCellObject(i, j) tmp(j - 1) = "(" & drwtxt.name & ":" & drwtxt.Text & ")" Next cells(i - 1) = Join(tmp, ",") Next GetTableData = cells End Function
本来なら行うべき細かなチェックはしてません。
実行するとDrawファイルと同じでフォルダ内に
(Drawファイル名)_table.csv
が出来上がります。
吐き出されるデータはCSVフォーマットで各セルの
(オブジェクト名 : セルの値)
なっています。
サポートさんに指摘されたのですが、このセルのオブジェクト名は
手動で確認出来ないんです。
(手動でセルのプロパティを開いても "テーブル.xx" のような表記です)
その為、リンク情報で表示される「元エレメント」の名前で検索しても
Hitしません。
リンク情報見ても役に立たないんですね・・・。
出来上がった2個のCSVを付き合せて確認。人力で。
どう考えても面倒です。確認出来ないよりはまだマシですが、
時間が出来たらまともな物を作成します・・・。
それ以上にリンク情報を取得するヤツが、実務データで試すとエラー
になっちゃうんです。リンクが多いとエラーになるので、恐らく
ダイアログを閉じるタイミングが早過ぎるんだろうと思うのですが。