- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report
Dear coders
I have a routing that takes the tag and value of attributes inside a block and writes that to excel the way I need it.
Now I need also the prompt but when I add the line (vla-get-promptString x) I get error ; error: bad argument type: listp #<%catch-all-apply-error%>
Here is the routine working ( without the get promptstring)
(defun get-all-atts (obj)
(if (and obj
(eq :vlax-true (vla-get-HasAttributes obj))
(vlax-property-available-p obj 'Hasattributes))
(vl-catch-all-apply (function (lambda()
(mapcar (function (lambda (x)
(cons (vla-get-TagString x)(vla-get-promptString x)
(vla-get-TextString x))))
(append (vlax-invoke obj 'Getattributes)
(vlax-invoke obj 'Getconstantattributes)
)))))))
I simply thought to add bold part in the code but it gives back the errror
Does any coder here know what to change in order to get this work"?
The whole routine is found below
(vl-load-com)
(defun mip-conv-to-str (dat)(if dat (vl-princ-to-string dat) ""))
(defun get-all-atts (obj)
(if (and obj
(eq :vlax-true (vla-get-HasAttributes obj))
(vlax-property-available-p obj 'Hasattributes))
(vl-catch-all-apply (function (lambda()
(mapcar (function (lambda (x)
(cons (vla-get-TagString x)
(vla-get-TextString x))))
(append (vlax-invoke obj 'Getattributes)
(vlax-invoke obj 'Getconstantattributes)
)))))))
;|================== XLS ========================================
;* Purpose: Export of the list of data punto_datos in Excell
;* It is exported to a new leaf of the current book.
; If the book is not present, it is created
;* Arguments:
; punto_datos - The list of lists of data (LIST)
; ((Value1 Value2 ... VlalueN)(Value1 Value2 ... VlalueN)...)
; Each list of a kind (Value1 Value2... VlalueN) enters the name in
; a separate line in corresponding columns (Value1-A Value2-B and .ò.ä.)
; header - The list (LIST) headings or nil a kind (" Signature A " " Signature B "...)
; If header nil, is accepted ("X" "Y" "Z")
; Colhide - The list of alphabetic names of columns to hide or nil - to not hide ("A" "C" "D") - to hide columns A, C, D
; Name_list - The name of a new leaf of the active book or nil - is not present
;* Return: nil
;* Usage
;(xls '((1.1 1.2 1.3 1.4)(2.1 2.2 2.3 2.4)(3.1 3.2 3.3 3.4)) '("Col1" "Col2" "Col3" "Col4") '("B") "test") |;
(vl-load-com)
(defun xls ( punto_datos header Colhide Name_list / *aplexcel* *books-colection* Currsep
*excell-cells* *new-book* *sheet#1* *sheet-collection* col iz_listo row cell cols)
(defun Letter (N / Res TMP)(setq Res "")(while (> N 0)(setq TMP (rem N 26)
TMP (if (zerop TMP)(setq N (1- N) TMP 26) TMP)
Res (strcat (chr (+ 64 TMP)) Res) N (/ N 26))) Res)
(if (null Name_list)(setq Name_list ""))
(setq *AplExcel* (vlax-get-or-create-object "Excel.Application"))
(if (setq *New-Book* (vlax-get-property *AplExcel* "ActiveWorkbook"))
(setq *Books-Colection* (vlax-get-property *AplExcel* "Workbooks")
*Sheet-Collection* (vlax-get-property *New-Book* "Sheets")
*Sheet#1* (vlax-invoke-method *Sheet-Collection* "Add"))
(setq *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)))
(setq *excell-cells* (vlax-get-property *Sheet#1* "Cells"))
(setq Name_list (if (= Name_list "")
(vl-filename-base(getvar "DWGNAME"))
(strcat (vl-filename-base(getvar "DWGNAME")) "&" Name_list))
col 0 cols nil)
(vlax-for sh *Sheet-Collection* (setq cols (cons (strcase(vlax-get-property sh 'Name)) cols)))
(setq row Name_list)
(while (member (strcase row) cols)(setq row (strcat Name_list " (" (itoa(setq col (1+ col)))")")))
(setq Name_list row)
(vlax-put-property *Sheet#1* 'Name Name_list)
(setq Currsep (vlax-get-property *AplExcel* "UseSystemSeparators"))
(vlax-put-property *AplExcel* "UseSystemSeparators" :vlax-false) ;_êå èñïîëüçîâêòü ñèñòåìêûå óñòêêîâêè
(vlax-put-property *AplExcel* "DecimalSeparator" ".") ;_ðêçäåëèòåëü äðîáêîé è öåëîé ÷êñòè
(vlax-put-property *AplExcel* "ThousandsSeparator" " ") ;_ðêçäåëèòåëü òûñÿ÷åé
(vla-put-visible *AplExcel* :vlax-true)(setq row 1 col 1)
(if (null header)(setq header '("X" "Y" "Z")))
(repeat (length header)(vlax-put-property *excell-cells* "Item" row col
(vl-princ-to-string (nth (1- col) header)))(setq col (1+ col)))(setq row 2 col 1)
(repeat (length punto_datos)(setq iz_listo (car punto_datos))(repeat (length iz_listo)
(vlax-put-property *excell-cells* "Item" row col (vl-princ-to-string (car iz_listo)))
(setq iz_listo (cdr iz_listo) col (1+ col)))(setq punto_datos (cdr punto_datos))(setq col 1 row (1+ row)))
(setq col (1+(length header)) row (1+ row))
(setq cell (vlax-variant-value (vlax-invoke-method *Sheet#1* "Evaluate"
(strcat "A1:" (letter col)(itoa row))))) ;_ end of setq
(setq cols (vlax-get-property cell 'Columns))
(vlax-invoke-method cols 'Autofit)
(vlax-release-object cols)(vlax-release-object cell)
(foreach item ColHide (if (numberp item)(setq item (letter item)))
(setq cell (vlax-variant-value (vlax-invoke-method *Sheet#1* "Evaluate"
(strcat item "1:" item "1"))))
(setq cols (vlax-get-property cell 'Columns))
(vlax-put-property cols 'hidden 1)
(vlax-release-object cols)(vlax-release-object cell))
(vlax-put-property *AplExcel* "UseSystemSeparators" Currsep)
(mapcar 'vlax-release-object (list *excell-cells* *Sheet#1* *Sheet-Collection* *New-Book* *Books-Colection*
*AplExcel*))(setq *AplExcel* nil)(gc)(gc)(princ))
(defun C:ATTEXP2XL ( / blk pat head ss datalist att_list)
(princ "\nChoose a block")
(while (not(setq ss (ssget "_+.:S:E" '((0 . "INSERT")(66 . 1)))))
(princ "\nWrong... Choose a block with attributes"))
(setq blk (ssname ss 0) ss nil)
(setq pat (vl-remove-if-not '(lambda(x)(member (car x) '(0 2 410)))(entget blk)))
(setq head nil datalist nil)
(if (setq ss (ssget "_X" pat))
(progn
(foreach item (mapcar 'vlax-ename->vla-object (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss))))
(setq att_list (get-all-atts item))
(if (null head)(setq head (mapcar 'car att_list)))
(setq datalist (append datalist (list (mapcar 'cdr att_list))))
)
(xls datalist head nil nil)
)
)
(princ)
)
Kind Regards
Solved! Go to Solution.