C#ATIA

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

DrawのテーブルをCSVファイルとしてエクスポートする

久々にCATIAです。

DrawのテーブルをCSVファイルとしてエクスポートするを、以前は作って
いたのですが、あまりに使わないので紛失しました・・・。
仕方が無い為、急遽作成。

こんな感じのテーブルが有ります。

これを、こんな感じで

実際は、Excelに取り込みますが・・・。

'vba ExportTable using-'KCL0.0.12'
'テーブルをCSVでエクスポート

Option Explicit

Sub CATMain()

    'ドキュメントのチェック
    If Not KCL.CanExecute("DrawingDocument") Then Exit Sub

    'ドキュメント
    Dim doc As DrawingDocument
    Set doc = CATIA.ActiveDocument

    ' テーブル選択
    Dim msg As String
    msg = "エクスポートするテーブルを選択して下さい : ESCキー 終了"

    Dim table As DrawingTable
    Set table = KCL.SelectItem(msg, "DrawingTable")

    If KCL.IsNothing(table) Then Exit Sub
    
    ' テーブル情報取得
    Dim data As String
    data = get_table_data(table)

    ' パス取得
    msg = "CSVファイル保存"
    Dim path As String
    path = get_path(msg)
    If path = vbNullString Then Exit Sub

    ' 書き出し
    KCL.WriteFile path, data

End Sub


Private Function get_path( _
    ByVal msg As String) _
As String

    Dim suffix As String
    suffix = "*.csv"

    get_path = CATIA.FileSelectionBox( _
        msg, _
        suffix, _
        CatFileSelectionModeSave _
    )

End Function


Private Function get_table_data( _
    ByVal table As DrawingTable) _
As String

    Dim maxRow As Long
    maxRow = table.NumberOfRows
    
    Dim maxColumns As Long
    maxColumns = table.NumberOfColumns

    Dim data() As Variant
    ReDim data(maxRow - 1)
    
    Dim buf() As Variant
    ReDim buf(maxColumns - 1)

    Dim rowData As Variant
    Dim idx As Long
    Dim i As Long, j As Long
    For i = 1 To maxRow
        For j = 1 To maxColumns
            buf(j - 1) = table.GetCellString(i, j)
        Next

        data(i - 1) = Join(buf, ",")
    Next

    get_table_data = Join(data, vbCrLf)

End Function

本当に急いでいたので、こちらの"KCL"と言う自作ライブラリを使用しています。
GitHub - kantoku-code/KCL: CATIA Library for personal CATVBA (CATIA macro)