VBAによる「文字列取得」サンプル
ExcelのVBAを使って、MicroGDSの図面からテキストを読み取るカスタマイズサンプルをご紹介します。
※本ページは、MicroGDS V10までの内容で記載されております。
MicroGDS V11より、.NET APIインターフェースのみのサポートとなります。
用途
表や仕様の文字など、図面に並べて描かれているテキストを取り込んでExcelシートに転記します。 図面上の位置を読み取って、上にあるものから順にシートの行に並べます。
VBAによる「文字列取得」サンプルツール
使い方
- MicroGDSでテキストを読み取りたい図面を表示し、プリミティブ選択モード(F9)で、 テキストを選択します。
- Excelでマクロを起動します。選択したテキストが新たなシートに転記されます。
※テキストが左右に並んでいる場合、シートの行の上下は不定です。
(このサンプルプログラムでは、横方向の位置の処理は行っていません。)
作り方
- 概要
- Excelで、ツール/マクロ/Visual Basic Editorを選ぶ
- 起動したエディタ上で、挿入/標準モジュールを行う
- ソースを入力する(コピー/ペーストする)
- 必要に応じてモジュールの名称を変更する
- ソース解説
- 各種の定義をCadlink.txtから転記します。
(.txt内の定義数が多いので、すべてを含めるとVBAが処理できないため。) - MicroGDSとの通信を開始します。
- プリミティブ選択モードかどうかを調べ、違っている場合は通信を止めて終了します。
- 選択されているプリミティブの数を調べます。選択されているプリミティブがない場合は、通信を止めて終了します。
- 選択されているプリミティブのリストを取得します。一つ一つのプリミティブは、レイヤ、 オブジェクト、プリミティブの3つのリンク番号で特定されます。これは通常CadPriTriple構造体に保存します。ここではCadPriTripleの配列に選択されているプリミティブすべてのリンク番号を取得しています。なお、事前に選択数で配列の大きさを再定義しています。
- プリミティブ毎にループします。
- リストに記録されているリンク番号で、特定のプリミティブを「カレント」にします。 カレントとは、これからプログラムで扱う対象であることを表します。
- プリミティブのタイプ(種類)を取得します。 タイプが「テキスト」の場合のみ処理を行います。 今回はテキストのみを扱いますが、プリミティブには、線やラスター、3Dのデータなど7種類あります。
- テキストプリミティブの情報を取得します。
ここでは、表記されている文字列とプリミティブの座標値を読み込み、セルに記入しています。 - Excelの関数を用いて、プリミティブのY座標値の大小(図面上の上下)でソートを行います。
※プログラムから選択リストを用いたり、ループしてプリミティブの情報を取得する場合、 結果の値は図面内の見た目の位置とは異なる順序で返ってきます。 このため、位置による結果を必要とする場合は、プログラムで判断して処理を行う必要があります。今回は、Excelのソート関数を利用して記載位置を再現する並べ替えを行っています。
サンプルソース
Option Explicit ' * Module: Cadlink/Cadlnk60 ' conversation constants ' Constants used for identifying the current selection mode ' **************************************** Type CadVector ' ****************************************** Type CadPriTriple ' ************************************ Type CadAxes ' **************************************** Public Sub gettext() isnewsheet = 0 ' MicroGDSとの通信を開始 ' プリミティブ選択モードのチェック ' 選択数のチェック ' Yのカラムを消す ' MicroGDSとの通信を終了 End Sub |