本帖最后由 /db_自贡黄明儒_ 于 2016-12-22 16:04 编辑
不错。如果第二次执行不覆盖前一次的结果就更好了。(vl-load-com)
(defun c:MyExcel (/ E FIL OBJ ROW SS USEDRANGE)
(or *ACAD* (setq *ACAD* (vlax-get-acad-object)))
(or *DOC* (setq *DOC* (vla-get-ActiveDocument *ACAD*)))
(_StartUndo *DOC*)
(or *excel* (setq *excel* (vlax-get-or-create-object "excel.application")))
(or *ActiveSheet*
(setq *ActiveSheet* (vlax-get *excel* 'ActiveSheet))
(vlax-invoke (vlax-get *excel* 'workbooks) 'Add)
)
(vlax-invoke *excel* 'CalculateFullRebuild);此句希望下面的Row每次不同,但未成功
(setq *ActiveSheet* (vlax-get *excel* 'ActiveSheet))
(setq UsedRange (vlax-get *ActiveSheet* 'UsedRange))
(setq Row (vlax-get UsedRange 'Row))
(setq fil '((-4 . "<or")
(0 . "LINE")
(-4 . "<AND")
(0 . "LWPOLYLINE")
(90 . 2)
(-4 . "AND>")
(-4 . "or>")
)
)
(while (setq ss (ssget ":S" fil))
(repeat (sslength ss)
(setq e (ssname ss 0))
(setq obj (vlax-ename->vla-object e))
(setq Row (1+ Row))
(vlax-put (vlax-get-property *ActiveSheet* 'range (strcat "A" (itoa Row)))
'value
(vlax-get obj 'startpoint)
)
(vlax-put (vlax-get-property *ActiveSheet* 'range (strcat "B" (itoa Row)))
'value
(vlax-get obj 'endpoint)
)
(vlax-put (vlax-get-property *ActiveSheet* 'range (strcat "C" (itoa Row)))
'value
(vlax-get obj 'Length)
)
(ssdel e ss)
)
)
(vlax-put *excel* 'Visible :vlax-true)
;;(vlax-release-object *ActiveSheet*)
(_EndUndo *DOC*)
(princ)
)
(vlax-invoke *excel* 'CalculateFullRebuild);此句希望下面的Row每次不同,但未成功
土办法是将row设置成全局变量,但不是很爽。
|