我可能已经用与您相同的方法完成了这项工作,但我还调整了主例程,以考虑来自子函数的nil返回(块没有任何标记)。
(defun get-all-atts ( obj / att_lst r_lst lst tag ) (setq att_lst (vlax-invoke obj 'getattributes) r_lst (list "TAG" "PN" "FIND" "SORT" "QUANTITY") lst nil );end_setq (foreach att att_lst (setq tag (vla-get-tagstring att)) (if (member tag r_lst) (setq lst (cons (cons tag (vla-get-textstring att)) lst)) );end_if );end_foreach (if (> (length lst) 1) (setq lst (reverse lst))));end_defun;; Main part ;;(defun C:ATOUT ( / adoc osm axss tmp com_data tot) (vl-load-com) (setq adoc (vla-get-activedocument (vlax-get-acad-object)) osm (getvar "osmode") );end_setq (vla-endundomark adoc) (vla-startundomark adoc) (setvar "osmode" 0) (setvar "cmdecho" 0) (cond ( (ssget "_X" (list (cons 0 "INSERT")(cons 66 1)));;This will get you all attributed blocks in the drawing (setq com_data nil) (vlax-for a (setq axss (vla-get-activeselectionset adoc)) (setq tmp (get-all-atts a)) (if (> (length tmp) 0) (setq com_data (cons tmp com_data))) );end_for (setq com_data (reverse com_data) tot (length com_data) );end_setq ) );end_cond;; foreach loop for data display only can be removed later (foreach x com_data (princ x) (princ "\n") );end_foreach (princ) (setvar "osmode" 0) (setq axss nil) (vla-endundomark adoc) );end_defun
我注意到,您发送的示例图形中的一个块标记名为“FIND#”,而不是“FIND”,这是正确的吗?
关于excel部分,您希望excel工作表是什么样子?
这是从预定义工作簿/工作表开始还是从空白工作簿/工作表开始?
图纸名称应该是什么?
工作簿名称应该是什么。