不完美,但。。。
(defun c:objectDataExtract(/ coordslist count ent f fieldnames fieldstring path ss ssents strcatlst tablelist x z) (vl-load-com) (if (and (setq path (getfiled "Specify .CSV file name:" (getvar 'dwgprefix) "csv" 1 ) ) (setq ss (ssget "x")); SELECT EVERYTHING (setq ssEnts (vl-remove-if-not 'ade_odgettables (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss))))));Filter out only that which has a table attached to it (progn (setq f (open path "w")) (foreach ent ssents(setq tablelist (ade_odgettables ent))(setq count 0)(repeat (length tablelist) (foreach def (cdr (assoc "Columns" (ade_odtabledefn (nth count tablelist)))) (if (not (member (cdr (assoc "ColName" def)) fieldnames)) (setq fieldnames (cons (cdr (assoc "ColName" def)) fieldnames)) ) ) )(setq strcatlst (apply 'strcat (mapcar '(lambda (x) (strcat x ": " (If (/= (type (setq fieldstring (ade_odgetfield ent (ade_odgettables ent) x 0))) 'STR) (rtos fieldstring 2 2) fieldstring) ",")) fieldnames)))(setq coordsList (apply 'strcat (mapcar '(lambda (z) (strcat (rtos z 2) ",")) (vlax-get (vlax-ename->vla-object ent) 'Coordinates))))(write-line (strcat strcatlst coordsList) f)) (setq f (close f)))))