【AutoLISP データ読み込み】エクセル ファイルを読み込む

person reading book on bathtub AutoLISP
Photo by cottonbro studio on Pexels.com

エクセル形式のファイルをCSV形式に変換してAutoCADに読み込みます。

予備知識

列と行

エクセルの列は縦。行は横です。

「漢字の2本線の向き」って考えると覚えやすいです。

ファイル読み込み

テキスト形式のファイルを読み込む方法について書いた記事です。
エクセルファイルをCSV形式で保存することで、テキスト形式と同じように読み込むことができます。

エクセルをCSV形式で保存する

下図のような、数字が2列並んだエクセルファイルを用意してください。

エクセルからCSVに変換するには、
「形式を選択して保存」で「CSV (カンマ区切り)(*.csv)」を選びます。
すると拡張子.xlsx のエクセルファイルではなく、拡張子 .csvのCSVファイルとして保存できます。

CSVとは、Comma Separated Valueの略です。
書式など取り除いてシンプルな値をコンマで区切ったファイルです。

CSVの中身

CSVで保存したファイルの中身を見てみましょう。

エクセルで開くと、エクセルファイルと違いがありません。


メモ帳から開いてください。

このように、行は改行され、各列はコンマで区切られたテキストファイルと同じです。

ちなみに、エクセルをCSVで保存せずにに拡張子 .xlsx のままメモ帳で開くと、

他のソフトでは扱いにくい中身になっています。

open で開く

それでは、コマンドラインに入力しながら動きを見ていきましょう。

コマンドラインがAutoCADにありませんか?

CTRL+9 はコマンドライン表示/非表示のショートカットです。

もしくは、commandline はコマンドラインを表示させるコマンドです。

まず、関数 open を使って開きます。
setq を使って戻り値を変数 FileIDに代入しておきます。

コマンドラインに下記の通り入力してください。(”C:/JagaimoLisp/JagaimoLISP.csv” の部分は保存したCSVファイルのパスを入れてください)“r” は読み込みモードです。

(setq FileID (open "C:/JagaimoLisp/JagaimoLISP.csv" "r")) 

入力後、エンターキーで実行です。

read-line で1行目を読み込む

無事にファイルが開いたら (read-line FileID) で読み込みこみ、setq で変数 Tx に代入します。
わかりやすいように 関数 alert を使って読み込んだ文字列をメッセージボックスで表示してみましょう。

(setq Tx (read-line FileID))
(alert Tx)

この1行目を読み込んで

メッセージボックスが現れます。

このように、各列は , (コンマ) で区切られて読み込まれます。

読み込んだ値を使って点を作図

先ほど読み込んだ値を 変数 Tx に入れました。
これを使って点を入力してみます。

読み込んだ値は文字列 “1,1” ですが、ここで使う点座標を指定する値は 数値にせずに文字列のままでも大丈夫です。

(command-s "._POINT" Tx)

点の表示スタイルはコマンド PTYPE で変更できます。
はっきり見えるように PTYPE で目立つ点タイプにして下さい。

読み込んだ値”1,1″の位置に点が作図されました。

close で閉じる

使い終わったら (close FileID) でテキストファイルを閉じます。

(close FileID)

全行を読み込むコマンド

上記の例に関数 while を使って繰り返すコマンドにすると以下のようになります。
コマンド名は test です。
テキストを1行ずつ読み込んで点を挿入していきます。

(defun c:test (/ Tx FileID)
  
    (if (setq FileID (open "C:/JagaimoLisp/JagaimoLISP.csv" "r")) ;読み込みモードで開く
      
      (progn   ;もしファイルを開けたら 
        
        (while  (setq Tx (read-line FileID)) ;文字列がある間1行読み込む。
          (command-s "._POINT" Tx) ;読み込んだ値に点を挿入
        );while Txに値が入らなくなるまで繰り返し
        
        (close FileID);ファイルを閉じる
      
      );progn
      
      (alert "ファイルが見つかりませんでした") ;開けなかったら場合はこのメッセージを出す
    
    );if
  
(princ));defun

例のファイルを読み込むとこのように点が10行分作図されます。

まとめ

  • エクセルをCSV形式で保存すると他のソフトでも使いやすいシンプルなデータになる。
  • 行は改行で、列はコンマで区切られる。

参考記事

読み込んだコンマ区切りの文字列をリストにする記事です。

ファイルの読み込みについて。

関数 while について。

ファイルを読み込んで使うコマンド例。

Comments