想问一下lisp读取CAD中数据到excel如何不依赖数据的坐标而人为的实现数据换行?
本人lisp初学者,上次看网上的程序有lisp读取CAD中的数据到excel中,想问一下如果不依赖CAD中数据的坐标值人为的控制哪条数据换行哪条数据不换行,例如在点选数据...
本人lisp初学者,上次看网上的程序有lisp读取CAD中的数据到excel中,想问一下如果不依赖CAD中数据的坐标值人为的控制哪条数据换行哪条数据不换行,例如在点选数据时按某个键盘上的按键实现换行操作,或者类似的操作,能否实现?望大神指教。
展开
1个回答
展开全部
(defun C:WZ ( / n ss &kw L ff %k %k1 %k2 %k3 %k4 %k5 %k6);批量选择文字到 (setvar "cmdecho" 0) ;;关闭变量 (setvar "blipmode" 0);;关闭控制点 (vl-load-com) ;;加载vlax扩展函数 (setq n 0 ss '()) ;;取得一个空表 (princ "\n请选择文字") (setq &kw (ssget '((0 . "TEXT,MTEXT"))));选择文字 (if (/= &kw nil);;如果有选择了文字 (progn (setq L (sslength &kw) ff (open "d://文字到TXT.xls" "w");建立表格 );; (repeat L (setq &kw1 (entget (ssname &kw n)) %k1 (cdr (assoc 10 &kw1)) ;;取得文字坐标 %k2 (cdr (assoc 1 &kw1)) ;;取得文字内容 ss (cons (list %k1 %k2) ss);;加入选择集 n (+ n 1) ) ) (setq ss (vl-sort ss (function (lambda (x y)(< (fix (caar x)) (fix (caar y)))))));;X排序从左到右 (setq ss (vl-sort ss (function (lambda (x y)(> (fix (cadar x)) (fix (cadar y)))))));;Y排序从上到下 (setq &kw1 (nth 0 ss) %k1 (caar &kw1);;第一个元素的第一个对象 %k2 (cadar &kw1);;第一个元素的第二个对象 %k3 (cadr &kw1);;第二个元素 n 1 ) (repeat (- L 1) (setq &kw2 (nth n ss) %k4 (caar &kw2) %k5 (cadar &kw2) %k6 (cadr &kw2) %k (- %k2 %k5) n (+ n 1) ) (if (> %k 20) (progn (princ %k3 ff) (princ "\n" ff);;不在同一行换行 (setq %k1 %k4 %k2 %k5 %k3 %k6) ) ) (if (and (<= %k 20) (< %k1 %k4)) (progn (princ %k3 ff) (princ "\t" ff);;同一行不换行;换一个位置 (setq %k1 %k4 %k2 %k5 %k3 %k6) ) ) (if (and (<= %k 20) (> %k1 %k4)) (progn (princ %k6 ff) (princ "\t" ff) ) ) ) (princ %k3 ff) (close ff);;关闭文本 ) ) (prin1);;结束);;文字复制到记事本,以后缀(.lsp)命名如(wz.lsp);加载到autocad就可以使用。
表格在D盘,打开D盘就可以看到。
如在cad里面有文字,如图排列:
输入命令:WZ;选择对象后,打开D盘,就可以看到表格:
打开表格就是一样的排列:
如果要记事本的内容导入表格的话,打开表格,直接导入即可,表格有这个功能的。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询