dlanorh 发表于 2022-7-5 13:55:41

我可能已经用与您相同的方法完成了这项工作,但我还调整了主例程,以考虑来自子函数的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工作表是什么样子?
这是从预定义工作簿/工作表开始还是从空白工作簿/工作表开始?
图纸名称应该是什么?
工作簿名称应该是什么。

devitg 发表于 2022-7-5 14:01:19

它是dwg中的att名称

BIGAL 发表于 2022-7-5 14:05:30

这是我的工作,但将在一个商业产品看,说共享软件非常便宜。
 
这是块数据提取的修改版本,您只需选择相关块,它对块进行计数,但当前使用2个深度索引,因此将区分相同的块名,但att值不同,例如door black silver v的door black gold将给出2个带颜色和把手类型的块门总数。 
 
结果出来的时候它就成了一张表,我在你的dwg上测试了一下,它成功了。 
 
选项只是选择
读取数据文件,重新块名和属性顺序
同样,创建一个数据文件,该文件将由dcl驱动,以便于拾取。
 
重要的一点是,它支持具有与我在块上测试的块一样多属性的块,1 att、2 att、3 att、15 att作为混合,并且工作良好。
 
我下一步要做的是在输出中输入哪些属性。

maratovich 发表于 2022-7-5 14:09:00

缪若凯恩
让我们看看你最后想要什么。
你需要了解你需要什么。
你还有更多的例子吗?
语言不是问题,主要是算法。
看这个视频,像这样?  https://youtu.be/JTSJD9-VP28

myoujou cain 发表于 2022-7-5 14:12:12

比加尔-太好了。。。我希望以一种可以将其与外部数据相结合的形式获得我的数据,类似于原始数据提取。
 
dlanorh-我们做的几乎完全一样,只是我忘了删除常数,我添加了另一个条件来消除任何3个或更多att值为零的块。很高兴知道我能很好地掌握这门语言。也不用担心确切的名字,我只需要确保在“r\u lst”中有确切的名字。
 
大家-最后我希望找到一种方法,将其与另一个电子表格链接,就像原始的数据提取功能一样。但我需要的是它是一个CSV文件,看起来像这样:(“BOM”是来自另一本工作手册的链接数据)
TAG
PN
BOM
查找
数量
排序
CTRL
CTRL
INFPRO
CTRL
1
3000
T-1
T1
CXF460
T1
[font=Cal

Jim Clayton 发表于 2022-7-5 14:14:39

I think we're trying to make the same thing.  I was able to make quite a bit of progress on it on the Cad side with the help of something RLX sent me. Will post it in the morning. (Sending this now or I'll forget).

BIGAL 发表于 2022-7-5 14:19:53

I have been renovating my house so no spare time its almost finished about 1 week left so will have time again to get back to "time consuming" ideas.  
页: 1 [2]
查看完整版本: li命令的数据提取