明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 21117|回复: 60

悬赏面积统计输出EXCEL

  [复制链接]
发表于 2012-2-13 16:44 | 显示全部楼层 |阅读模式
1明经币
求各位高手帮忙
写一个LISP,要求很简单,
就这一个功能
请看图

直接框选,把框选里面的 面域面积统计出来
还有版号也是,
(我说有的图纸,版号都在面域里面的)
附件: 您需要 登录 才可以下载或查看,没有账号?注册

最佳答案

查看完整内容

;;; 框选封闭区域面积到excel by:langjs ;;; ================== (defun c:qq (/ appxls col ent ent1 f i lst m2 newbook newitem newsheet numrow pt ss txt value xlscells xlsworkbooks) (defun initexcel () (setq appxls (vlax-get-or-create-object "excel.application") xlsworkbooks (vlax-get-property appxls "workbooks") newbook (vlax-invoke-method xlswor ...

点评

怎么看来看去都是要这些东西?有时间整一个合集估计比较吃香呢  发表于 2012-2-13 19:27

本帖被以下淘专辑推荐:

  • · excel|主题: 80, 订阅: 2
发表于 2012-2-13 16:44 | 显示全部楼层
本帖最后由 langjs 于 2012-2-14 19:55 编辑


;;; 框选封闭区域面积到excel    by:langjs
;;; ==================
(defun c:qq (/ appxls col ent ent1 f i lst m2 newbook newitem newsheet numrow pt ss txt value xlscells xlsworkbooks)
  (defun initexcel ()
    (setq appxls (vlax-get-or-create-object "excel.application")
          xlsworkbooks (vlax-get-property appxls "workbooks")
          newbook (vlax-invoke-method xlsworkbooks "add")
          newsheet (vlax-get-property newbook "sheets")
          newitem (vlax-get-property newsheet "item" 1)
          xlscells (vlax-get-property newitem "cells")
    )
    (vla-put-visible appxls :vlax-true)
  )
  (defun endexcel ()
    (vlax-release-object xlscells)
    (vlax-release-object newitem)
    (vlax-release-object newsheet)
    (vlax-release-object newbook)
    (vlax-release-object xlsworkbooks)
    (vlax-release-object appxls)
  )
  (defun datacell (nurow col value)
    (vlax-put-property xlscells "item" numrow col (vl-princ-to-string value))
  )
  (setvar "cmdecho" 0)
  (vl-load-com)
  (if (setq ss (ssget '((0 . "*TEXT"))))
    (progn
      (= lst nil)
      (repeat (setq i (sslength ss))
        (setq ent (entget (ssname ss (setq i (1- i))))
              pt (cdr (assoc 10 ent))
              txt (cdr (assoc 1 ent))
        )
        (command "-boundary" pt "")
        (command ".region" (entlast) "")
        (setq ent1 (entlast))
        (if (= (cdr (assoc 0 (entget ent1))) "REGION")
          (setq ent (vlax-ename->vla-object ent1)
                m2 (rtos (vla-get-area ent))
                lst (cons (list txt m2) lst)
                f (entdel ent1)
          )
        )
      )
      (setq lst (vl-sort lst (function (lambda (x y)
                                           (< (car x) (car y))
                                         )
                               )
                 )
      )
      (setq lst (cons (list "版号" "面积") lst))
      (initexcel)
      (setq numrow 1)
      (foreach f lst
        (datacell numrow 1 (car f))
        (datacell numrow 2 (cadr f))
        (setq numrow (1+ numrow))
      )
      (endexcel)
    )
  )
  (princ)
)

点评

langjs兄,这个程序非常好,太感谢你了。  发表于 2013-7-11 21:25
呵呵,多谢langjs兄, 对了,这个能整成.xls格式的吗??  发表于 2012-2-14 15:00

评分

参与人数 1明经币 +1 金钱 +50 收起 理由
zbwei120 + 1 + 50 很给力!非常感谢!!!

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2012-2-13 21:06 | 显示全部楼层
没有高手感兴趣吗?
回复

使用道具 举报

发表于 2012-2-14 09:23 | 显示全部楼层
为什么任兵 发表于 2012-2-13 21:06
没有高手感兴趣吗?

好程序 不知道怎么 我统计出输出到exce中个数翻倍  再提议一下 能把线长度加上,输出的单位是实际单位,再就是能输出到已打开的exce中吗?   多谢
回复

使用道具 举报

发表于 2012-2-14 16:22 | 显示全部楼层
谢谢热心人分享源码
回复

使用道具 举报

发表于 2012-2-14 19:56 | 显示全部楼层
本帖最后由 langjs 于 2012-3-2 23:19 编辑

现学现卖

;;; 框选封闭区域面积到excel    by:langjs
;;; ==================
(defun c:qq (/ appxls col ent ent1 ent2 f i lst lst1 m2 maxpoint minpoint na
        newbook newitem newsheet numrow pc pmax pmin pt sc snap ss
        txt value vh viewsize vw x xlscells xlsworkbooks y
     )
  (defun GetViewSize (/ pc vh sc vw vh pmin pmax)
    (setq pc (getvar "viewctr")
   vh (getvar "viewsize")
   sc (getvar "screensize")
   vw (* vh (/ (car sc) (cadr sc)))
   pmin (list (- (car pc) (* 0.5 vw)) (- (cadr pc) (* 0.5 vh)))
   pmax (list (+ (car pc) (* 0.5 vw)) (+ (cadr pc) (* 0.5 vh)))
    )
    (list pmin pmax)
  )
  (defun initexcel ()
    (setq appxls (vlax-get-or-create-object "excel.application")
   xlsworkbooks (vlax-get-property appxls "workbooks")
   newbook (vlax-invoke-method xlsworkbooks "add")
   newsheet (vlax-get-property newbook "sheets")
   newitem (vlax-get-property newsheet "item" 1)
   xlscells (vlax-get-property newitem "cells")
    )
    (vla-put-visible appxls :vlax-true)
  )
  (defun endexcel ()
    (vlax-release-object xlscells)
    (vlax-release-object newitem)
    (vlax-release-object newsheet)
    (vlax-release-object newbook)
    (vlax-release-object xlsworkbooks)
    (vlax-release-object appxls)
  )
  (defun datacell (nurow col value)
    (vlax-put-property xlscells "item" numrow col
         (vl-princ-to-string value)
    )
  )
  (vl-load-com)
  (setvar "cmdecho" 0)
  (setq snap (getvar "osmode"))        ; 关闭捕捉
  (setvar "osmode" 0)
  (if (setq ss (ssget '((0 . "*TEXT"))))
    (progn
      (setq ViewSize (GetViewSize))
      (setq lst1 '())
      (repeat (setq i (sslength ss))
(setq ent (entget (ssname ss (setq i (1- i))))
       pt (cdr (assoc 10 ent))
       txt (cdr (assoc 1 ent))
)
(command "-boundary" pt "")
(setq ent2 (entlast))
(if (= (cdr (assoc 0 (entget ent2))) "LWPOLYLINE")
   (progn
     (vla-getboundingbox (vlax-ename->vla-object ent2) 'minpoint
    'maxpoint
     )
     (setq pmax (vlax-safearray->list maxpoint)
    pmin (vlax-safearray->list minpoint)
     )
     (entdel ent2)
     (setq lst1 (cons (list pmin pmax pt txt) lst1))
   )
)
      )
      (= lst nil)
      (repeat (setq i (length lst1))
(setq na (nth (setq i (1- i))
        lst1
   )
       pmin (car na)
       pmax (cadr na)
       pt (caddr na)
       txt (cadddr na)
)
(command ".zoom" "W" pmin pmax)
(command "-boundary" pt "")
(command ".region" (entlast) "")
(setq ent1 (entlast))
(if (= (cdr (assoc 0 (entget ent1))) "REGION")
   (setq ent (vlax-ename->vla-object ent1)
  m2 (rtos (vla-get-area ent) 2 2)
  lst (cons (list txt m2) lst)
  f (entdel ent1)
   )
)
      )
      (command ".zoom" "W" (car ViewSize) (cadr ViewSize))
      (setq lst (vl-sort lst (function (lambda (x y)
      (< (car x) (car y))
           )
        )
  )
      )
      (setq lst (cons (list "版号" "面积") lst))
      (initexcel)
      (setq numrow 1)
      (foreach f lst
(datacell numrow 1 (car f))
(datacell numrow 2 (cadr f))
(setq numrow (1+ numrow))
      )
      (endexcel)
    )
  )
  (setvar "osmode" snap)        ; 恢复捕捉
  (princ)
)

点评

太强了,真是不错,可以好好的学习一下!  发表于 2012-11-18 21:48
lpl
非常不错,如果能增加把面积标写在图形中,那非常棒。  发表于 2012-7-2 16:04
很热心啊,论坛之所以能办好就是有一群热心人。不过花过多时间在这上,本职工作不影响吗?胡说几句哈,谢谢对新人的帮助  发表于 2012-5-7 16:52
回复

使用道具 举报

发表于 2012-2-15 08:42 | 显示全部楼层
langjs 发表于 2012-2-14 19:56
现学现卖

;;; 框选封闭区域面积到excel    by:langjs

多谢 辛苦了 能把线形长度也加上吗
回复

使用道具 举报

发表于 2012-2-17 12:15 | 显示全部楼层
好东西,值得学习!
回复

使用道具 举报

发表于 2012-2-19 09:46 | 显示全部楼层
二楼犀利啊,顶起
回复

使用道具 举报

发表于 2012-2-19 19:37 | 显示全部楼层
输出excel目的是什么
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-4-25 16:46 , Processed in 2.460438 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表