li命令的数据提取
所以我试图创建一个完整的系统,这样我就可以用大约3个按钮来设计一个电子原理图。大部分都完成了,但我在最后一部分遇到了一堵墙,那就是出口物料清单。问题是,我基本上需要从命令行运行数据提取向导,据我所知,这是无法完成的(如果我错了,请纠正我)。因此,我开始为命令行重新创建向导,或多或少就是这样。但是现在我需要帮助,我附上了我的代码副本(大部分是从不同的人那里借来的)。最初是打印块名和句柄,我不需要它们,所以我一直在尝试删除它们,但现在当我运行脚本时,它会创建一个如下的工作表:nil(标记TD65)N/a1518(标记TD66)N/a1213无无无无无无无无无无无无无无无无无无无无无无无无无无无无无无无无无无无无无无无无无无无(标记TD69)N/a1516nilN/a(标记CR32)N/a(TAG.CR)N/a(TAG.SW5)N/a(TAG.TD66)N/a1516(标记LT3)不适用
TAG是我想要包含在列表中的标签的名称,我不知道为什么它会这样打印,N/a是手柄的位置,但我似乎无法摆脱它打印它。。。这方面的任何帮助都会很好。
最后,我还想将这个excel文件与另一个excel文件结合起来,类似于数据提取命令允许您包含外部数据的方式,如果您能提供任何帮助,也将不胜感激。 如果你有一个测试图,你可以保存在AC2010格式,并附加到一个新的职位。这将对调试代码有很大帮助。 这是一张测试图 是这样的吗?
;Gilles Chanteau ;Modified by Júnior Nogueira
(defun c:Demo (/ ss file i)
(if (setq ss (ssget "_X" '((0 . "INSERT") (66 . 1) (2 . "test,`*U*"))))
(progn
(setq file (open (strcat (getvar 'dwgprefix) (vl-filename-base (getvar 'dwgname)) ".csv") "w"))
(repeat (setq i (sslength ss))
(setq br (ssname ss (setq i (1- i))))
(if (= (getpropertyvalue (getpropertyvalue br "BlockTableRecord") "Name") "test")
(write-line
(strcat
(getpropertyvalue br "TAG")
","
(getpropertyvalue br "PN")
","
(getpropertyvalue br "FIND#")
","
(getpropertyvalue br "SORT")
","
(getpropertyvalue br "QUANTITY")
)
file
)
)
)
(close file)
)
)
(princ)
) 初级Nogueira,
这看起来可能可行,但我可能需要帮助将其集成到现有程序中。具体来说,如何添加对象选择。。我不太熟悉SS函数。
下面的代码将获取图形中的每个属性块,并以以下格式提取块中的每个标记和值对:
((“TAG1”.“VALUE1”)(“TAG2”.“VALUE2”)。。。(“*常数*:TAGN”“VALUEN”))
我已附上您发送的图纸和修改后的试块。现在它包含一个不可见的常量属性(标记“BLK\U NAME”VALUE“TEST”)
代码:
;;Get all tags and values from block including constant attributes in following form:
;; (("TAG1" . "VALUE1") ("TAG2" . "VALUE2") ...("*CONSTANT*: TAGN" . "VALUEN"))
(defun get-all-atts ( obj / att_lst catt_lst lst tag )
(setq att_lst (append (vlax-invoke obj 'getattributes) (setq catt_lst (vlax-invoke obj 'getconstantattributes)))
lst nil
);end_setq
(foreach att att_lst
(setq tag (vla-get-tagstring att))
(if (member att catt_lst)
(setq lst (cons (cons (strcat "*CONSTANT*: " tag) (vla-get-textstring att)) lst))
(setq lst (cons (cons tag (vla-get-textstring att)) lst))
);end_if
);end_foreach
(setq lst (reverse lst))
);end_defun
;; Main part ;;
(defun C:ATOUT ( / adoc axss 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 com_data (cons (get-all-atts a) com_data))
);end_for
(setq com_data (reverse com_data)
tot (length com_data)
);end_setq
)
);end_cond
(foreach x com_data
(princ x)
(princ "\n")
);end_foreach
(princ)
(setvar "osmode" 0)
(vla-endundomark adoc)
);end_defun
有很多多余的代码,我认为这干扰了收集和打印到excel的内容。接下来我将看excel部分。 德拉诺,谢谢你。
这更简洁,我可以将整个图形的选择更改为一个选择(这对我的应用程序很重要)。然而,这段代码有一个问题。也就是说,它获取所有属性,我只想打印我列出的5个。在我的图形中,块具有许多属性,这些属性对图形很重要,但对BOM表不重要。也许你知道一种只打印这5张照片的方法?或者如何让Lisp程序只拉这5个。此外,我不需要“(“*常数*:tagn”valuen”)部分,我真的不希望它出现在excel中。我不知道lisp是否需要这个功能。
不管怎样,你给了我一个更好的起点。我会处理好这件事,如果我有进展,请告诉你。
谢谢 我不太明白,但也许你需要这样的东西:“Shema”?
如果你让我知道五个标记字符串的名称,我可以调整代码。我还需要知道其中是否有常数属性,因为如果不需要常数属性,那么获取和附加常数属性是没有意义的。 马拉托维奇-
也许很难说,因为我不懂那种语言。
德拉诺-
它们都不是常量,标记名是:“tag”“PN”“FIND”“SORT”“QUANTITY”我能够自己找到一种方法,但我觉得还有更好的方法。因此,我期待着看到您如何将其限制为仅这五个属性。此外,我期待着看到你如何将这些信息写入excel。我所做的对我来说毫无意义,哈哈。
谢谢。
页:
[1]
2