在中列出图案填充和线性对象
大家好,底部显示了一个例程,该例程可以向Excel提供图形中线型对象的摘要视图。超级方便的工具。
这个程序运行得很好,只是有一些粗糙的边缘需要锉掉。
这两个问题:
问题1:
在给出第二列并将列长度滑动到第三列时,方便地在文本“小计”中使用excel。
这只是为了简化数据以按字母顺序排序。
这可能吗?
问题2:
是否有可能在图案填充的第二个选项卡中生成总表面积。
每层每平方米。
那太好了。
问候和感谢。
巴特
(defun c:ple (/ elist en i layer layer_list
leng pline row ss sumlen total
x xlApp xlBook xlBooksxlCellsxlSheet
xlSheets
)
(vl-load-com)
(setq xlApp (vlax-get-or-create-object "Excel.Application")
xlBooks(vlax-get-property xlApp "Workbooks")
xlBook (vlax-invoke-method xlBooks "Add")
xlSheets (vlax-get-property xlBook "Sheets")
xlSheet (vlax-get-property xlSheets "Item" 1)
xlCells (vlax-get-property xlSheet "Cells")
)
(vla-put-visible xlApp :vlax-true)
;headers
(vlax-put-property xlCells "Item" 1 1 "Layer")
(vlax-put-property xlCells "Item" 1 2 "Length")
(setq row 2
total 0)
(setq ss (ssget "_X" (list (cons 0 "*POLYLINE"))) i -1)
(repeat (sslength ss)
(setq en (ssname ss (setq i (1+ i)))
elist (entget en)
layer (cdr (assoc 8 elist)))
(if (not (member layer layer_list))
(setq layer_list (cons layer layer_list))))
(repeat (length layer_list)
(setq layer (car layer_list))
(vlax-put-property xlCells "Item" row 1 layer)
(setq ss (ssget "_X" (list (cons 0 "*POLYLINE")(cons 8 layer))) i -1 sumlen 0)
(repeat (sslength ss)
(setq row (1+ row))
(setq pline (vlax-ename->vla-object (ssname ss (setq i (1+ i)))))
(setq leng(vlax-curve-getdistatparam pline
(vlax-curve-getendparam pline)))
(vlax-put-property xlCells "Item" row 2 (rtos leng 4 3))
(vlax-put-property xlCells "Item" row 2 (rtos leng 2 3)); for metric units
(setq sumlen (+ sumlen leng)))
(setq row (1+ row))
(vlax-put-property xlCells "Item" row 1 "SubTotal:")
(vlax-put-property xlCells "Item" row 2 (rtos sumlen 4 3))
(setq total (+ total sumlen))
(vlax-put-property xlCells "Item" row 2 (rtos sumlen 2 3)); for metric units
(setq layer_list (cdr layer_list))
(setq row (+ row 2))
)
; footers:
(vlax-put-property xlCells "Item" row 1 "Total:")
(vlax-put-property xlCells "Item" row 2 (rtos total 4 3))
(vlax-put-property xlCells "Item" row 2 (rtos total 2 3)); for metric units
(mapcar (function (lambda(x)
(vl-catch-all-apply
(function (lambda()
(progn
(vlax-release-object x)
(setq x nil)))))))
(list xlCells xlSheet xlSheets xlBook xlBooks xlApp)
)
(alert "Close Excel file manually")
(gc)(gc)
(princ)
)
(princ "\t\t***\tType PLE to write polines length to Excel\t***")
(princ) 对于图案填充的面积,我将使用vla get area函数,然后将每个选定图案填充相加。这里有一个很好的例子说明了如何做到这一点:https://forums.autodesk.com/t5/visual-lisp-autolisp-and-general/sum-of-hatch-areas-lisp-routine-modification/td-p/2071424 您好,如果您不在输出文件中格式化something属性,我更喜欢另存为*。csv
然后使用控制字符的strcat,例如tab=“\t”更容易
AFAIK创建文本文件比创建excel文件更快。。
(strcat (rtos total 1 3)"\t M"(chr 178))
;"123.400\t M²"
页:
[1]