找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 14061|回复: 80

[求助] 按编号顺序将网格的周长面积输出到EXCEL表

  [复制链接]

已领礼包: 6468个

财富等级: 富甲天下

发表于 2014-12-30 15:31:22 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
最近看到很多高手发布了有关EXCEL的函数,应该有很多高手对CAD→EXCEL有深入研究。所以想求助一个功能,能够获取图档中所有网格的长、宽、周长、面积,按网格编号的顺序,输出到EXCEL中,并需抓取图框中一些文字,按固定的格式绘制成表,不如该如何实现,希望各位热心大侠能够帮忙。
请点击此处下载

查看状态:需购买或无权限

您的用户组是:游客

文件名称:tt.rar 
下载次数:168  文件大小:54.11 KB 
下载权限: 不限 以上  [免费赚D豆]



tt1.png tt2.png
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-12-30 17:30:46 | 显示全部楼层
st788796 发表于 2014-12-30 16:55
直接在后面回复

加上排序, 再简单处理下就可以批量写到 xls 了

在后面跟帖!
游客,如果您要查看本帖隐藏内容请回复
xls.gif

评分

参与人数 1D豆 +5 收起 理由
sicky111 + 5 有始有终奖!

查看全部评分

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 1 反对 0

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-12-30 15:41:37 | 显示全部楼层
既然是固定格式,最好先做好 这个 XLS ,后面直接往里写,不要用 程序再去计算,这样才能高效方便,你先制好这样一个 xls

点评

谢谢大侠回答,如果先在CAD绘制出表格,再用论坛的CAD→EXCEL的程式输出到EXCEL,确实会简单很多,但是步骤多了,所以想简化成框选整个图框,就自动输出到EXCEL绘制成表了。  发表于 2014-12-30 16:33
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-12-30 15:45:17 | 显示全部楼层
你这个要有前处理,都是拿 Line 绘制的就要说是一个网格,图层也不再一起,先说说哪些算网格吧

点评

黄色的外围轮廓线(L2)、里面一层白色的线(L3)、中间纵横交错的粉色的形成网格的线(L6),其实不管是什么线型什么图层什么颜色,简单来说,就是把图形中只要标有编号的格子,作为单一并且独立的对象来计算。  发表于 2014-12-30 16:40
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-12-30 16:32:44 | 显示全部楼层
简单写了下,返回 ((编号 BOX 周长 面积) ....) 这样一个表
  1. (defun c:tt (/ ss s1 s2 tlst plst ss1 ss2 lst rlst result)
  2.   (if (and (setq ss (ssget '((-4 . "<or")
  3.                              (-4 . "<and")
  4.                              (0 . "text")
  5.                              (8 . "编号")
  6.                              (-4 . "and>")
  7.                              (-4 . "<and")
  8.                              (0 . "line")
  9.                              (8 . "L*")
  10.                              (-4 . "and>")
  11.                              (-4 . "or>")
  12.                             )
  13.                     )
  14.            )
  15.            (setq s1 (ssget "P"
  16.                            '((0 . "text")
  17.                              (8 . "编号")
  18.                             )
  19.                     )
  20.            )
  21.            (setq s2 (xdrx_pickset_subtract ss s1))
  22.       )
  23.     (progn
  24.       (setq tlst   (mapcar '(lambda (x)
  25.                               (xdrx_getpropertyvalue x "Position" "textstring")
  26.                             )
  27.                            (xdrx_pickset->ents s1)
  28.                    )
  29.             ss1           (xdrx_entity_transformedcopy s2 (xdrx_matrix_identity 3))
  30.             ss1           (xdrx_curve_intersectbreak ss1 0.1)
  31.             ss2           (xdrx_geom_searchRegions ss1 0)
  32.             lst           (mapcar
  33.                      '(lambda (x)
  34.                         (xdrx_getpropertyvalue
  35.                           x
  36.                           "BoundingBox"
  37.                           "Length"
  38.                           "Area"
  39.                         )
  40.                       )
  41.                      (xdrx_pickset->ents ss2)
  42.                    )
  43.             rlst   (cdr        (vl-sort lst
  44.                                  '(lambda (x1 x2)
  45.                                     (> (last x1) (last x2))
  46.                                   )
  47.                         )
  48.                    )
  49.             result (vl-remove
  50.                      nil
  51.                      (mapcar '(lambda (x / l)
  52.                                 (if (setq l (vl-member-if
  53.                                               '(lambda (a)
  54.                                                  (apply        'xdrx_point_isinside
  55.                                                         (cons (car a) (car x))
  56.                                                  )
  57.                                                )
  58.                                               tlst
  59.                                             )
  60.                                     )
  61.                                   (cons (cadr l) x)
  62.                                 )
  63.                               )
  64.                              rlst
  65.                      )
  66.                    )
  67.       )
  68.       (xdrx_entity_delete ss2)
  69.       (princ (car result))
  70.     )
  71.   )
  72.   (princ)
  73. )

点评

谢谢您的热心帮助,这么快就写出了代码,我试了一下,返回nil,没有输出list。  发表于 2014-12-30 16:56

评分

参与人数 1D豆 +5 收起 理由
sicky111 + 5 热心帮忙奖!

查看全部评分

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-12-30 16:55:45 | 显示全部楼层
本帖最后由 st788796 于 2014-12-30 16:57 编辑

直接在后面回复

加上排序, 再简单处理下就可以批量写到 xls 了
  1. (defun c:tt (/ ss s1 s2 tlst plst ss1 ss2 lst rlst result)
  2.   (if (and (setq ss (ssget '((-4 . "<or")
  3.                              (-4 . "<and")
  4.                              (0 . "text")
  5.                              (8 . "编号")
  6.                              (-4 . "and>")
  7.                              (-4 . "<and")
  8.                              (0 . "line")
  9.                              (8 . "L*")
  10.                              (-4 . "and>")
  11.                              (-4 . "or>")
  12.                             )
  13.                     )
  14.            )
  15.            (setq s1 (ssget "P"
  16.                            '((0 . "text")
  17.                              (8 . "编号")
  18.                             )
  19.                     )
  20.            )
  21.            (setq s2 (xdrx_pickset_subtract ss s1))
  22.       )
  23.     (progn
  24.       (setq tlst   (mapcar '(lambda (x)
  25.                               (xdrx_getpropertyvalue x "Position" "textstring")
  26.                             )
  27.                            (xdrx_pickset->ents s1)
  28.                    )
  29.             tlst   (vl-sort tlst
  30.                             '(lambda (x1 x2)
  31.                                (if (= (caar x1) (caar x2))
  32.                                  (> (cadar x1) (cadar x2))
  33.                                  (< (caar x1) (caar x2))
  34.                                )
  35.                              )
  36.                    )
  37.             ss1           (xdrx_entity_transformedcopy s2 (xdrx_matrix_identity 3))
  38.             ss1           (xdrx_curve_intersectbreak ss1 0.1)
  39.             ss2           (xdrx_geom_searchRegions ss1 0)
  40.             lst           (mapcar
  41.                      '(lambda (x)
  42.                         (xdrx_getpropertyvalue
  43.                           x
  44.                           "BoundingBox"
  45.                           "Length"
  46.                           "Area"
  47.                         )
  48.                       )
  49.                      (xdrx_pickset->ents ss2)
  50.                    )
  51.             rlst   (cdr        (vl-sort lst
  52.                                  '(lambda (x1 x2)
  53.                                     (> (last x1) (last x2))
  54.                                   )
  55.                         )
  56.                    )
  57.             rlst   (vl-sort rlst
  58.                             '(lambda (x1 x2)
  59.                                (if (= (caaar x1) (caaar x2))
  60.                                  (> (cadaar x1) (cadaar x2))
  61.                                  (< (caaar x1) (caaar x2))
  62.                                )
  63.                              )
  64.                    )
  65.             result (vl-remove
  66.                      nil
  67.                      (mapcar '(lambda (x / l)
  68.                                 (if (setq l (vl-member-if
  69.                                               '(lambda (a)
  70.                                                  (apply        'xdrx_point_isinside
  71.                                                         (cons (car a) (car x))
  72.                                                  )
  73.                                                )
  74.                                               tlst
  75.                                             )
  76.                                     )
  77.                                   (cons (cadar l) x)
  78.                                 )
  79.                               )
  80.                              rlst
  81.                      )
  82.                    )
  83.       )
  84.       (xdrx_entity_delete ss2)
  85.       (setq result (mapcar
  86.                      '(lambda (x)
  87.                         (append
  88.                           (cons
  89.                             (distof (car (xdrx_string_split (car x) "-")))
  90.                             (cons
  91.                               (car x)
  92.                               (mapcar '- (last (cadr x)) (caadr x))
  93.                             )
  94.                           )
  95.                           (cddr x)
  96.                         )
  97.                       )
  98.                      result
  99.                    )
  100.             result (vl-sort result
  101.                             '(lambda (x1 x2)
  102.                                (< (car x1) (car x2))
  103.                              )
  104.                    )
  105.             result (mapcar 'cdr result)
  106.       )
  107.       (foreach x result
  108.         (princ "\n")
  109.         (princ x)
  110.       )
  111.     )
  112.   )
  113.   (princ)
  114. )

部分结果
命令: tt
选择对象: 指定对角点: 找到 135 个
选择对象:
(1-1 0.0 550.0 0.0 2460.0 374000.0)
(1-2 0.0 550.0 0.0 2460.0 374000.0)
(1-3 0.0 550.0 0.0 2460.0 374000.0)
(1-4 0.0 550.0 0.0 2460.0 374000.0)
(1-5 0.0 550.0 0.0 2460.0 374000.0)
(1-6 0.0 550.0 0.0 2460.0 374000.0)
(1-7 0.0 550.0 0.0 2460.0 374000.0)
(1-8 0.0 550.0 0.0 2460.0 374000.0)
(1-9 0.0 550.0 0.0 2460.0 374000.0)
(1-10 0.0 550.0 0.0 2460.0 374000.0)
(2-1 0.0 550.0 0.0 2460.0 374000.0)
(2-2 0.0 550.0 0.0 2460.0 374000.0)
(2-3 0.0 550.0 0.0 2460.0 374000.0)
(2-4 0.0 550.0 0.0 2460.0 374000.0)
(2-5 0.0 550.0 0.0 2460.0 374000.0)
(2-6 0.0 550.0 0.0 2460.0 374000.0)
(2-7 0.0 550.0 0.0 2460.0 374000.0)
(2-8 0.0 550.0 0.0 2460.0 374000.0)
(2-9 0.0 550.0 0.0 2460.0 374000.0)
(2-10 0.0 550.0 0.0 2460.0 374000.0)

点评

奇怪,我不能输出,跟CAD版本有关系吗,我用的是2007,有加载晓东老大的API函数。  发表于 2014-12-30 17:09
命令: tt 选择对象: 指定对角点: 找到 135 个 选择对象: 命令:  发表于 2014-12-30 17:07

评分

参与人数 1D豆 +5 收起 理由
sicky111 + 5 很给力!经验;技术要点;资料分享奖!

查看全部评分

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6468个

财富等级: 富甲天下

 楼主| 发表于 2014-12-30 17:41:49 | 显示全部楼层
谢谢大侠,看演示像我需要的效果,但是我这边测试还是没有反应,是不是加载的文件不对?我测试的CAD是2007版,加载的是XDRx.2007.arx,XDRx.Init.2007.arx,xd-lisp-lib.VLX,XDRx.lsp,XDRx.x86.dll这几个文件,请指教!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-12-30 17:52:57 | 显示全部楼层
sicky111 发表于 2014-12-30 17:41
谢谢大侠,看演示像我需要的效果,但是我这边测试还是没有反应,是不是加载的文件不对?我测试的CAD是2007 ...

用到了新写的一个函数 xd::list: measure 仅写出了前 30 项

演示是 Windows 7 + autocad 2008
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6468个

财富等级: 富甲天下

 楼主| 发表于 2014-12-30 17:58:02 | 显示全部楼层
xd::list: measure这个函数在哪里可以找到,可以提供下吗?

点评

就在开源函数库论坛的首页呢 http://bbs.xdcad.net/thread-678698-1-1.html  详情 回复 发表于 2014-12-30 19:25
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6468个

财富等级: 富甲天下

 楼主| 发表于 2014-12-30 18:06:54 | 显示全部楼层
大侠是不是先把EXCEL表格做成一个样板文件,用CAD获取list表,再把表中各项填入到样板文件中?当前表格只给出30行,如果数量超过30行,需要增加一个表格,页数1、页数2、页数3……
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-12-30 18:30:04 来自手机 | 显示全部楼层
sicky111 发表于 2014-12-30 18:06
大侠是不是先把EXCEL表格做成一个样板文件,用CAD获取list表,再把表中各项填入到样板文件中?当前表格只给 ...

正解,用模版写入区域是已知,只要按照这个区域构造list后一次写入即可

至于多页,可以用sheet,也可以用复制区域,给个行或列偏移,还是一样的list
,所用到的函数、方法最近的帖子都有介绍,综合起来就知道那些函数用途了

xd:: 函数都发布在 开源函数库
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 51个

财富等级: 招财进宝

发表于 2014-12-30 19:25:17 | 显示全部楼层
sicky111 发表于 2014-12-30 17:58
xd::list: measure这个函数在哪里可以找到,可以提供下吗?

就在开源函数库论坛的首页呢

http://bbs.xdcad.net/thread-678698-1-1.html

点评

谢谢。  详情 回复 发表于 2014-12-31 00:03

评分

参与人数 1D豆 +5 收起 理由
sicky111 + 5 热心帮忙奖!

查看全部评分

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 41个

财富等级: 招财进宝

发表于 2014-12-30 21:10:19 | 显示全部楼层
能不能不要模板?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-12-30 21:43:41 | 显示全部楼层
bai2000 发表于 2014-12-30 21:10
能不能不要模板?

修改程序去适应模板而不是不要模板!

不要自己给自己加难度,改下 XLS 远比你在程序中计算省时省力!

点评

你好这个函数能不能在 CAD2016版本上 运行啊?  详情 回复 发表于 2021-9-9 13:01
大侠的建议也是不错的,只要能达到目的,简化过程就行。  详情 回复 发表于 2014-12-31 00:06
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2963个

财富等级: 家财万贯

发表于 2014-12-30 21:48:10 | 显示全部楼层
漂亮,学习一下
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-12-24 11:34 , Processed in 0.501173 second(s), 65 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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