需要注意的几件事。。。。
您正在创建一个划定的选项卡。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
)
)
(setq f (close f))
(vlax-invoke oShell 'open path)
(princ "Done. ")
(prompt "\n** UNDO will not delete the resultant .CSV file created ** ")
)
)
(*error* nil)
)
干杯
我完全同意。问题是,我试图坚持他们原来的Lisp程序,这样他们可能会更好地遵循。我个人使用vla命令创建excel文件。也许本周晚些时候,如果其他人没有做到这一点,我会推出一个更流线型的版本。
... 我(错了?)我以为我就是这么做的。
Lol.对不起。这已经是漫长的一周了。
我真的只是想让它成为一个真正的excel文件,而不是以前发布的文件或csv。
我在通读你的密码。我真的很喜欢你的方法。更干净。
别担心;我只是在开玩笑。。。我的提议很简单,是供他人考虑的提议。
你这么说真是太好了;非常感谢。 对我来说,Commandobill的Lisp程序很好用。我看到Blackbox的lisp在错误处理方面很好,但它缺少了一些功能,比如允许用户选择原点,然后转换到ucs,不添加文本。
除此之外,我还通过插入一个数据链接表将lisp提升到了一个新的层次,并使用J.Villareal的实用程序将其带回AutoCAD。
餐桌风格(标准)是我最大的障碍之一。我无法修改标准表格样式并重复使用它。无法另存为标准模板。有什么想法吗?或者我应该把它作为一个单独的线程发布?
页:
1
[2]