C#ATIA

↑タイトル詐欺 主にFusion360API 偶にCATIA V5 VBA(絶賛ネタ切れ中)

2D属性リンクを扱いたい4

こちらの続きです。
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しません。
f:id:kandennti:20190220190236p:plain
リンク情報見ても役に立たないんですね・・・。

出来上がった2個のCSVを付き合せて確認。人力で。
f:id:kandennti:20190220190246p:plain
どう考えても面倒です。確認出来ないよりはまだマシですが、
時間が出来たらまともな物を作成します・・・。

それ以上にリンク情報を取得するヤツが、実務データで試すとエラー
になっちゃうんです。リンクが多いとエラーになるので、恐らく
ダイアログを閉じるタイミングが早過ぎるんだろうと思うのですが。