cadamrao 发表于 2022-7-6 11:03:04

CAD表格坐标X,Y,Z

你好
 
请用任何LISP将CAD表格坐标X、Y、Z转换为EXCEL?
提前谢谢
amr公司

fixo 发表于 2022-7-6 11:42:05

 
试试这样的
 


(vl-load-com)
;; local defuns
(defun get_table_content (atable/   col   cols   data
    datum   hastile row   rows   start
    tmp
   )
(setq cols(vla-get-columns atable)
rows(vla-get-rows atable)
start rows
)
(if (eq :vlax-true (vla-get-titlesuppressed atable))
   (progn
   (setq rows (1- rows))
   (setq hastile T)
   (setq hastile nil)
   )
)
(if (eq :vlax-true (vla-get-headersuppressed atable))
   (setq rows (1- rows))
)
(setq row (- start rows))
(repeat rows
   (setq col 0)
   (repeat cols
   (setq datum (vla-gettext atable row col))
   (setq tmp (cons datum tmp))
   (setq col (1+ col))
   )
   (setq data (cons (reverse tmp) data)
tmpnil
row(1+ row)
   )
)
(setq data (reverse data))
(if hastile
   (setq data (append (list (caar data) (cdr data))))
)
data
)
(defun merge_first_row (xlsht columns / adr rng)
(setq adr (strcat "A1:" (chr (+ 65 (1- columns))) "1"))
(setq rng (vlax-get-property xlsht 'Range adr))
(vlax-put-property
   rng
   'HorizontalAlignment
   (vlax-make-variant -4108 vlax-vbinteger)
)   ;1
(vlax-put-property
   rng
   'VerticalAlignment
   (vlax-make-variant -4107 vlax-vbinteger)
)   ;2
(vlax-put-property rng 'WrapText (vlax-make-variant -1 11)) ;3
(vlax-put-property
   rng
   'Orientation
   (vlax-make-variant -4128 vlax-vbinteger)
)   ;4
(vlax-put-property rng 'AddIndent (vlax-make-variant -1 11)) ;5
(vlax-put-property
   rng
   'IndentLevel
   (vlax-make-variant 0 vlax-vbinteger)
)   ;6
(vlax-put-property
   rng
   'ShrinkToFit
   (vlax-make-variant -1 11)
)   ;7
(vl-catch-all-apply
   (function (lambda ()
(vlax-put-property
   rng
   'MergeCells
   (vlax-make-variant -1 11)
)
      )
   )
)   ;8
(vlax-put-property
   rng
   'ReadingOrder
   (vlax-make-variant -5002 vlax-vbinteger)
)   ;9

(vlax-invoke rng 'Merge)
(vlax-release-object rng)
(setq rng nil)
)

(defun draw-grid (xlapp xlsht / a bords cnt rng sel)
(setq rng (vlax-get-property xlsht 'UsedRange))
(vlax-invoke-method rng 'Select)
(setq sel (vlax-get-property xlapp 'Selection))
(setq bords (vlax-get-property sel "Borders"))
;; iterate through all edges of selection
(setq cnt 0)
(vlax-for a bords
   (setq cnt (1+ cnt))
   (vl-catch-all-apply
   (function (lambda ()
   (progn
   (if (< cnt 5)
       (progn
(vlax-put-property
    a
    "LineStyle"
    (vlax-make-variant 1 3)
)
(vlax-put-property
    a
    "Weight"
    (vlax-make-variant 4 3)
)
(vlax-put-property
    a
    "ColorIndex"
    (vlax-make-variant 5 5)
)
       )   ;progn
       ;; turn off the diagonal lines:
       (vlax-put-property
a
"LineStyle"
(vlax-make-variant -4142 3)
       )
   )
   )
)
   )
   )
)
(vlax-release-object rng)
(vlax-release-object sel)
)
;; main part
;; based on rouitine written byAlejandro Leguizamon
(defun C:LX (/      adoc    atablecol   columns data    en
   ent   mergedrow   rows    xlapp   xlbks   xlcls
   xlcolsxlrng   xlsht   xlshtsxlwbk
    )
(or (vl-load-com))
(or adoc
   (setq adoc
   (vla-get-activedocument
       (vlax-get-acad-object)
   )
   )
)
(if (and
(setq ent (entsel "\nSelect table >>"))
(equal "ACAD_TABLE"
       (cdr (assoc 0 (entget (setq en (car ent))))
       )
)
   )
   (progn
   (setq atable (vlax-ename->vla-object en))
   (setq data (get_table_content atable))
   (setq xlapp(vlax-get-or-create-object "Excel.Application")
    xlbks(vlax-get-property xlapp "Workbooks")
    xlwbk(vlax-invoke-method xlbks "Add")
    xlshts (vlax-get-property xlwbk "Sheets")
    xlsht(vlax-get-property xlshts "Item" 1)
    xlcls(vlax-get-property xlsht "Cells")
   )
   (vla-put-visible xlapp :vlax-true)
   (setq row 0)
   (setq columns (length (last data))
    rows    (length data)
   )
   (if (= 1 (length (vl-remove-if (function (lambda(x)(equal "" x)))(car data))))
(setq merged T)
(setq merged nil)
   )
   (if merged
(progn
(setq row (1+ row))
(vlax-put-property
    xlcls
    "Item"
    row
    1
    (vl-princ-to-string (caar data))
)
(setq data (cdr data))
(foreach lst data
    (setq row (1+ row)
   col 1
    )
    (foreach itm lst
      (vlax-put-property
xlcls
"Item"
row
col
(vl-princ-to-string itm)
      )
      (setq col (1+ col))
    )
)
(merge_first_row xlsht columns)
)
(progn
(setq row 0)
(foreach lst data
    (setq row (1+ row)
   col 1
    )
    (foreach itm lst
      (vlax-put-property
xlcls
"Item"
row
col
(vl-princ-to-string itm)
      )
      (setq col (1+ col))
    )
)
)
   )

   (draw-grid xlapp xlsht)

   (setq xlrng (vlax-get-property xlsht 'UsedRange))
   (setq xlcols (vlax-get-property xlrng 'Columns))
   (vlax-invoke-method xlcols 'AutoFit)

   (vlax-invoke-method
xlwbk
'SaveAs
(strcat (getvar "dwgprefix") "List.xls")
-4143
nil
nil
:vlax-false
:vlax-false
1
2
   )
   (vlax-release-object xlcls)
   (vlax-release-object xlsht)
   (vlax-release-object xlshts)
   (vlax-release-object xlwbk)
   (vlax-release-object xlbks)
   (vlax-release-object xlapp)
   (setq xlapp nil)
   (alert "Excel File Was Saved.
Close Excel Manually")
   )
)
(gc)
(gc)
(gc)
(princ)
)
(princ "\n===========================\n")
(princ "\n   Start with LX to run ...")
(princ "\n===========================\n")
(princ)


 
~'J'~

cadamrao 发表于 2022-7-6 11:50:44

 
 
 
 
干得好!谢谢laa。。
 
amr公司

fixo 发表于 2022-7-6 12:18:08

不客气
 
~'J'~
页: [1]
查看完整版本: CAD表格坐标X,Y,Z