CAD図面内にある複数の型番や注記テキストを、「図面の上から順番にエクセルにリスト化したい」と思ったことはありませんか?
ARESやAutoCADの標準機能である「データ書き出し(DATAEXTRACTION)」コマンドでもエクセル出力は可能ですが、書き出される順番が作成順(ランダム)になってしまい、後からエクセル側で並び替える手間が発生します。
そこで今回は、ARES Standard(および上位版)や、AutoCAD(LISP対応版)で動作するLISPプログラム(マクロ)を使って、図面内の「1行文字」と「マルチテキスト」を自動でY座標の大きい順(上から順)に並び替え、テキスト内容だけをCSV形式で一括出力する方法を解説します!
1. 自動書き出しLISPプログラム(コード)
まずは以下のコードをすべてコピーして、メモ帳などのテキストエディタに貼り付けてください。ファイル名を txt2csv.lsp (拡張子を .lsp)にして保存します。
※このコードは互換性が高いため、ARESとAutoCADのどちらでも修正なしでそのまま動作します。
(defun c:TXT2CSV ( / ss i ent pnt y txt lst filename file x)
(princ "\n--- 文字を上から順にCSV書き出し ---")
;; 1. 1行文字(TEXT)とマルチテキスト(MTEXT)を選択
(setq ss (ssget '((0 . "TEXT,MTEXT"))))
(if ss
(progn
(setq i 0)
(setq lst nil)
;; 2. 選択した文字の「内容」と「Y座標」を取得してリスト化
(repeat (sslength ss)
(setq ent (entget (ssname ss i)))
;; 10番DXFコードから位置を取得(MTEXTは10、TEXTも10を基準に取得)
(setq pnt (cdr (assoc 10 ent)))
(setq y (cadr pnt)) ; Y座標
;; 文字列の取得(MTEXTの一部の書式コードはそのまま残ります)
(setq txt (cdr (assoc 1 ent)))
;; リストに格納: (Y座標 . 文字列)
(setq lst (cons (cons y txt) lst))
(setq i (1+ i))
)
;; 3. Y座標の降順(大きい順 = 上から順)にソート
(setq lst (vl-sort lst '(lambda (a b) (> (car a) (car b)))))
;; 4. 保存先CSVファイルの指定
(setq filename (getfiled "CSVファイルを保存" "" "csv" 1))
(if filename
(progn
(setq file (open filename "w"))
;; 5. ファイルへの書き出し(文字列のみ)
(foreach x lst
(write-line (cdr x) file)
)
(close file)
(princ (strcat "\n書き出しが完了しました: " filename))
)
(princ "\nキャンセルされました。")
)
)
(princ "\n文字が選択されませんでした。")
)
(princ)
)
2. 使い方・操作手順
作成したLISPファイルを使って、実際に文字を書き出す手順は以下の5ステップです。ARES、AutoCADともに共通の操作で実行できます。
- LISPの読み込み: CADの作図画面に、保存した
txt2csv.lspファイルをドラッグ&ドロップします(またはAPPLOADコマンドでロード)。 - コマンドの実行: コマンドラインに TXT2CSV と入力してEnterを押します。
- 文字の選択: 画面上の文字(1行文字・マルチテキスト)をマウスでまとめて範囲選択し、Enterを押します(関係のない線分などを一緒に囲んでも、文字だけが自動抽出されます)。
- ファイルの保存: 保存先を指定するウィンドウが表示されるので、任意のフォルダ(デスクトップなど)を選択し、ファイル名を入力して保存します。
- Excelで確認: 出力されたCSVファイルをExcelで開くと、図面の上にあった文字から順に、テキスト内容だけがきれいに一列に並んでいます。
3. 💡 使うときの注意点・Tips
- 左右の並び順について: このプログラムは純粋に「Y座標(高さ)」の大きさだけでソートします。そのため、ほぼ同じ高さで左右に並んでいる文字がある場合、ミリ単位のわずかな高低差によって上下が判定されます。
- マルチテキストの書式コード: マルチテキスト内で部分的に色やフォントを変更している場合、その制御コード(例:
{\fMS Gothic;文字列})がそのままCSVに出力されてしまうことがあります。文字化けのように見える場合は、CAD側でマルチテキストの書式を解除するか、1行文字(TEXT)に分解(EXPLODE)してから実行することをおすすめします。