求个将数据导出到EXCEL的AutoLISP
1个回答
推荐于2017-12-16 · 知道合伙人软件行家
关注
展开全部
(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盘,就可以看到表格:
打开表格就是一样的排列:
如果要记事本的内容导入表格的话,打开表格,直接导入即可,表格有这个功能的。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询