yohan69 Posté(e) le 6 mai 2010 Posté(e) le 6 mai 2010 Bonjour à tous,J'essaie depuis un moment d'adapter le lisp "CBL" en vain ...Ce lisp recense tous les blocs sélectionnés dans Excel avec leur nom en colonne 1 et leur nombre en colonne 2.Mais pour un bloc bien particulier, (toujours dans la sélection et toujours avec le même nom), je voudrais la valeur du 1er attribut, et pas le nombre (il n'y en aura toujours qu'un seul dans la sélection de toute façon) j'ai donné du: (setq att (vlax-invoke val 'getattributes)) mais je m'embrouille dans le tri ... HELP le code CBL d'origine: ;; Helper function 'count-blocks' ;; written by Fatty T.O.H. () 2005 * all rights removed (defun count-blocks (/ acsp adoc bname bname_list tmp_list ss tmp) (vl-load-com) (setq adoc (vla-get-activedocument (vlax-get-acad-object) ) acsp (vla-get-block (vla-get-activelayout adoc) ) ) (command "_.zoom" "_e") (setq ss (ssget "_X" (list (cons 0 "INSERT") ;|(cons 2 "block1,block2,block3")|;);your desired block names here ) ) (vlax-for a (vla-get-activeselectionset adoc) (if (wcmatch (vla-get-objectname a) "AcDbBlockReference*") (progn (setq bname (vla-get-name a)) (setq bname_list (cons bname bname_list)) ) ) ) (while (car bname_list) (setq tmp (list (vl-remove-if-not (function (lambda (a) (eq a (car bname_list)) ) ) bname_list ) ) ) (setq tmp_list (cons (car tmp) tmp_list)) (setq bname_list (vl-remove-if (function (lambda (a) (eq a (car bname_list)) ) ) bname_list ) ) (setq tmp nil) ) (setq tmp_list (mapcar (function (lambda (x) (list (car x) (length x)) ) ) (reverse tmp_list) ) ) tmp_list ) ;CaLL:(count-blocks);ok ;; Main program ; ;;; Based on program 'Excel' written by ;;; ALEJANDRO LEGUIZAMON - arquingeneu@gmail.com ;;; edited by Fatty (defun c:cbl (/ LAYER# LIST# N ROW TOTALVALUE VALUE) (vl-load-com) (setq *AplExcel* (vlax-get-or-create-object "Excel.application") *Books-Colection* (vlax-get-property *AplExcel* "Workbooks") *New-Book* (vlax-invoke-method *Books-Colection* "Add") *Sheet-Collection* (vlax-get-property *New-Book* "Sheets") *Sheet#1* (vlax-get-property *Sheet-Collection* "Item" 1) *excell-cells* (vlax-get-property *Sheet#1* "Cells") ) (vla-put-visible *AplExcel* :vlax-true) (setq row 4) (setq n 0) (setq totalvalue 0) (princ "\nCOUNTING BLOCKS IN DRAWING") (setq list# (count-blocks)) (setq totalvalue (apply '+ (mapcar 'cadr list#))) (repeat (length list#) (setq value (cadar list#)) (vlax-put-property *excell-cells* "Item" row 2 (vl-princ-to-string value) ) (setq layer# (caar list#)) (vlax-put-property *excell-cells* "Item" row 1 (vl-princ-to-string layer#) ) (setq list# (cdr list#)) (setq n (+ n 1)) (setq row (+ row 1)) ) (setq row (+ row 1)) (vlax-put-property *excell-cells* "Item" row 1 (vl-princ-to-string "TOTAL") ) (vlax-put-property *excell-cells* "Item" row 2 (vl-princ-to-string totalvalue) ) (vlax-put-property *excell-cells* "Item" 1 1 (vl-princ-to-string " Based on routine by ALEJANDRO LEGUIZAMON - http://arquingen.tripod.com.co" ) ) (vlax-put-property *excell-cells* "Item" 2 1 (vl-princ-to-string (strcat "COUNTING BLOCKS IN DRAWING: " (getvar "dwgprefix")) ) ) (vlax-put-property *excell-cells* "Item" 3 1 (vl-princ-to-string "Block name") ) (vlax-put-property *excell-cells* "Item" 3 2 (vl-princ-to-string "Subtotal") ) (vlax-release-object *excell-cells*) (vlax-release-object *Sheet#1*) (vlax-release-object *Sheet-Collection*) (vlax-release-object *New-Book*) (vlax-release-object *Books-Colection*) (vlax-release-object *AplExcel*) (alert "Save Excel file manually") ) (prompt "\nType CBL to execute ...") (princ)
(gile) Posté(e) le 6 mai 2010 Posté(e) le 6 mai 2010 Salut, (setq att (vlax-invoke val 'getattributes))retourne la liste des objets (vla-object) attribut de la référence de bloc 'val'.Le premier attribut est retourné par :(setq att (car atts))ou(setq att (nth 0 atts)) La valeur de cet attribut :(vla-get-TextString att) on peut aussi faire une recherche de l'attribut dans la liste par son étiquette avec vla-get-TagString Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
yohan69 Posté(e) le 7 mai 2010 Auteur Posté(e) le 7 mai 2010 je m'excuse d'être aussi nul, mais je ne parviens pas à insérer correctement ceci dans le lisp. en fait je ne comprends pas si les attributs font parti de la même liste que les noms ou pas. Faut-il insérer ces lignes en parallele de la démarche pde tri our les noms au début, ou dans la boucle d'écriture finale dans Excel?parce que ça me retourne toujours VLA-Objet nil !?encore désolé d'être aussi nul ...
Messages recommandés
Créer un compte ou se connecter pour commenter
Vous devez être membre afin de pouvoir déposer un commentaire
Créer un compte
Créez un compte sur notre communauté. C’est facile !
Créer un nouveau compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant