需要注意的几件事。。。。
您正在创建一个划定的选项卡。XLS文件,并非所有版本的Excel都对其友好:
此外,请注意,即使用户没有进行有效选择,也会创建一个文件。通过首先提示输入文件名和选择集,您可以集中精力处理选择集,这将阻止创建空文件。
另外,这不是必须的,但您可以通过在代码末尾调用临时错误处理程序并在那里包含恢复来简化系统变量的恢复。。。此外,您可以通过不使用命令调用来最小化需要存储的系统变量的数量(如果您愿意的话;同样,您的代码在大部分情况下都能正常工作)。
也就是说。。。这是完成这项任务的另一种方式。。。目前我唯一没有时间做的事情是首先对写入的结果实体数据进行排序。CSV由弧、圆、椭圆组成(不是要求的,而是我的强迫症真正想要包含的内容):
- (vl-load-com)
- (defun c:XYT (/ *error* path acApp oShell f acDoc nArc nCircle nEllipse
- origin oSpace height style objectName i oMtext
- )
- (defun *error* (msg)
- (if f
- (progn (close f) (vl-file-delete path))
- )
- (if acDoc
- (vla-endundomark acDoc)
- )
- (if oShell
- (vlax-release-object oShell)
- )
- (cond ((not msg)) ; Normal exit
- ((member msg '("Function cancelled" "quit / exit abort"))) ; <esc> or (quit)
- ((princ (strcat "\n** Error: " msg " ** "))) ; Fatal error, display it
- )
- (princ)
- )
- (if (and (setq path (getfiled "Specify .CSV file name:"
- (getvar 'dwgprefix)
- "csv"
- 1
- )
- )
- (ssget '((0 . "ARC,CIRCLE,ELLIPSE")))
- (princ "\nWorking, please wait... ")
- (princ)
- (setq oShell (vla-getinterfaceobject
- (setq acApp (vlax-get-acad-object))
- "Shell.Application"
- )
- )
- )
- (progn
- (setq f (open path "w"))
- (write-line
- "Serial Number:,X:,Y:,Dia (Major):,Dia (Minor):,Type:"
- f
- )
- (write-line "" f)
- (vla-startundomark
- (setq acDoc (vla-get-activedocument acApp))
- )
- (setq nArc 0)
- (setq nCircle 0)
- (setq nEllipse 0)
- (setq origin (vlax-3d-point '(0.0 0.0 0.0)))
- (setq oSpace (vlax-get acDoc
- (if (= 1 (getvar 'cvport))
- 'paperspace
- 'modelspace
- )
- )
- )
- (setq height (getvar 'textsize))
- (setq style (getvar 'textstyle))
- (vlax-for x (vla-get-activeselectionset acDoc)
- ;; mtext
- (setq oMtext
- (vla-addmtext
- oSpace
- origin
- 0.0
- (setq i
- (cond
- ((= "AcDbArc"
- (setq objectName (vla-get-objectname x))
- )
- (strcat "A" (itoa (setq nArc (1+ nArc))))
- )
- ((= "AcDbCircle" objectName)
- (strcat "C" (itoa (setq nCircle (1+ nCircle))))
- )
- ((= "AcDbEllipse" objectName)
- (strcat "E" (itoa (setq nEllipse (1+ nEllipse))))
- )
- )
- )
- )
- )
- (vla-put-height oMtext height)
- (vla-put-stylename oMtext style)
- (vla-put-attachmentpoint oMtext acattachmentpointmiddlecenter)
- (vla-move oMtext
- (vla-get-insertionpoint oMtext)
- (vlax-3d-point (setq center (vlax-get x 'center)))
- )
- ;; write
- (write-line
- (strcat i
- ","
- (rtos (car center))
- ","
- (rtos (cadr center))
- ","
- (if (= "AcDbEllipse" objectName)
- (strcat (rtos (vla-get-majorradius x))
- ","
- (rtos (vla-get-minorradius x))
- )
- (strcat (rtos (vla-get-radius x)) "," "")
- )
- ","
- (vl-string-subst "" "AcDb" objectName)
- )
- f
- )
- )
|