明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 9638|回复: 20

已解决:使用VLISP去除表格单元格文字格式

  [复制链接]
发表于 2010-6-24 17:39:00 | 显示全部楼层 |阅读模式
本帖最后由 作者 于 2010-6-27 22:43:44 编辑

从Excel中粘贴进AutoCAD的表格对象中的单元格文字常常带有格式,很不方便。

 

一个一个去很麻烦。写了一个程序可以去掉MTEXT格式。利用以前mccad提供的Regexp代码。

 

现在的问题是,如果表格中有公式就有大问题。试了多种方法都不成。(我在AutoCAD 2010中测试)

 

附件提供测试图和程序。求高手解决。


------------------

已解决, 完整解决方案在12楼。


"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2010-6-25 21:06:00 | 显示全部楼层

提供个思路看看对秋大侠有没帮助

选定要复制的区域后  ctrl+c

“选择性粘贴”选“数值”再确定

或者通过记事本转一道

这样选定区域内就没有公式了

发表于 2010-6-25 21:17:00 | 显示全部楼层
不知需要什么效果
发表于 2010-6-26 02:46:00 | 显示全部楼层

一个用于修改特定块属性的程序

鼠标左键点击table一个cell的中部空白处,不放松,拉出区域后放开鼠标,即可编辑选中区域cells的字体颜色等

 楼主| 发表于 2010-6-26 20:38:00 | 显示全部楼层
我需要保留公式。

去除所有的MTEXT覆盖,包括含公式的单元格。

现在是一运行程序,即使不对含公式的单元格操作,含公式的格子也会变成 ####
发表于 2010-6-26 22:12:00 | 显示全部楼层
试试这个
  1. (defun c:tt (/ e)
  2.   (if (setq e (car (entsel)))
  3.     (entmod
  4.       (mapcar (function (lambda (x / code)
  5.      (setq code (car x))
  6.      (if (member code '(1 300 302))
  7.        (cons code (mtext2text (cdr x)))
  8.        x
  9.      )
  10.    )
  11.        )
  12.        (entget e)
  13.       )
  14.     )
  15.   )
  16.   (princ)
  17. )
发表于 2010-6-26 22:33:00 | 显示全部楼层
看来还是非常特殊的东西,难道公式又不能通过程序来搞,真被桌子搞晕掉。
发表于 2010-6-26 23:47:00 | 显示全部楼层
本帖最后由 作者 于 2010-6-27 20:07:51 编辑

mccad发表于2010-6-26 22:33:00看来还是非常特殊的东西,难道公式又不能通过程序来搞,真被桌子搞晕掉。

公式就是 FIELD,Table    Dxf 中的 344 实体就是FIELD,FIELD 的 DXF 中 360 实体的 DXF 可以找到公式的表达式 

 

_$ (setq el (entget (car (entsel))))
((-1 . <图元名: 7ffffbd30e0>) (0 . "ACAD_TABLE") (330 . <图元名: 7ffffbf9820>) (5 . "86") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "WALL") (100 . "AcDbBlockReference") (2 . "*T2") (10 1.20988e+006 699580.0 0.0) (41 . 1.0) (42 . 1.0) (43 . 1.0) (50 . 0.0) (70 . 0) (71 . 0) (44 . 0.0) (45 . 0.0) (210 0.0 0.0 1.0) (100 . "AcDbTable") (280 . 0) (342 . <图元名: 7ffffbf9de0>) (343 . <图元名: 7ffffbd39c0>) (11 1.0 0.0 0.0) (90 . 22) (91 . 11) (92 . 5) (93 . 3) (94 . 0) (95 . 0) (96 . 0) (280 . 1) (281 . 1) (141 . 321.667) (141 . 320.556) (141 . 323.889) (141 . 321.111) (141 . 143.333) (141 . 143.333) (141 . 321.667) (141 . 276.667) (141 . 276.667) (141 . 276.667) (141 . 276.667) (142 . 645.337) (142 . 645.273) (142 . 744.463) (142 . 744.463) (142 . 744.463) (171 . 1) (172 . 0) (173 . 0) (174 . 0) (175 . 1) (176 . 1) (91 . 262183) (178 . 0) (145 . 0.0) (170 . 4) (63 . 0) (64 . 0) (283 . 1) (140 . 100.0) (92 . 0) (301 . "CELL_VALUE") (93 . 4) (90 . 4) (1 . "{\\f宋体|b0|i0|c134;\\C7;总建筑面积") (94 . 0) (300 . "") (302 . "{\\f宋体|b0|i0|c134;\\C7;总建筑面积") (304 . "ACVALUE_END") (171 . 1) (172 . 0) (173 . 0) (174 . 0) (175 . 1) (176 . 1) (91 . 262183) (178 . 0) (145 . 0.0) (170 . 6) (63 . 0) (64 . 0) (283 . 1) (140 . 100.0) (92 . 0) (301 . "CELL_VALUE") (93 . 4) (90 . 2) (140 . 44916.0) (94 . 0) (300 . "%lu2%tf[{\\f宋体|b0|i0|c134;\\C7;]") (302 . "{\\f宋体|b0|i0|c134;\\C7;44916.00") 
    ......

 

_$ (setq lst (vl-remove-if-not '(lambda (x) (= (car x) 344)) el))
((344 . <图元名: 7ffffbd38e0>) (344 . <图元名: 7ffffbd3900>) (344 . <图元名: 7ffffbd3920>) (344 . <图元名: 7ffffbd3940>) (344 . <图元名: 7ffffbd3960>) (344 . <图元名: 7ffffbd3980>) (344 . <图元名: 7ffffbd39a0>))
_$

_$ (entget (cdar lst))
((-1 . <图元名: 7ffffbd38e0>) (0 . "FIELD") (5 . "10E") (102 . "{ACAD_REACTORS") (330 . <图元名: 7ffffbd4970>) (102 . "}") (330 . <图元名: 7ffffbd4970>) (100 . "AcDbField") (1 . "_text") (2 . "{\\fSimSun|b0|i0|c134|p2;\\C7;%<\\_FldIdx 0>%}") (90 . 1) (360 . <图元名: 7ffffbd38f0>) (97 . 0) (91 . 63) (92 . 0) (94 . 13) (95 . 2) (96 . 0) (300 . "") (93 . 0) (7 . "ACFD_FIELD_VALUE") (93 . 3) (90 . 0) (94 . 0) (300 . "") (302 . "") (304 . "ACVALUE_END") (301 . "") (98 . 0))
_$

 

_$ (entget (cdr (assoc 360 (entget (cdar lst)))))
((-1 . <图元名: 7ffffbd38f0>) (0 . "FIELD") (330 . <图元名: 7ffffbd38e0>) (5 . "10F") (100 . "AcDbField") (1 . "AcExpr") (2 . "\\AcExpr (B2*B3) \\f \"%lu2\"") (90 . 0) (97 . 0) (91 . 63) (92 . 0) (94 . 59) (95 . 2) (96 . 0) (300 . "") (93 . 1) (6 . "ACAD_ROUNDTRIP_2008_FIELD_EVALOPTION") (93 . 0) (90 . 1) (91 . 63) (94 . 0) (300 . "") (302 . "") (304 . "ACVALUE_END") (7 . "ACFD_FIELD_VALUE") (93 . 4) (90 . 2) (140 . 598880.0) (94 . 0) (300 . "%lu2") (302 . "598880.00") (304 . "ACVALUE_END") (301 . "598880.00") (98 . 9))

 

 楼主| 发表于 2010-6-27 13:17:00 | 显示全部楼层
搞定。ActiveX方式没有办法。只能用dxf方式。
  1. (defun massoc (key alist / x nlist)  (foreach x alist    (if  (eq key (car x))      (setq nlist (cons (cdr x) nlist))    )  )  (reverse nlist))
  2. (defun c:tt (/ e ent flist1 flist2 flist f)  (if (setq e (car (entsel)))    (entmod      (mapcar (function  (lambda  (x / code)        (setq code (car x))        (if (member code '(1 3 300 302))          (cons code (mtext2text (cdr x)))          x        )      )        )        (setq ent (entget e))      )    )  )          ;entmod  ;; 第一层Field  (setq flist1 (massoc 344 ent))  ;; 第二层Field  (setq flist2 (massoc 360 (apply 'append (mapcar 'entget flist1))))  (setq flist (append flist1 flist2))  (foreach f flist    (entmod      (mapcar (function  (lambda  (x / code)        (setq code (car x))        (if (member code '(2))          (cons code (mtext2text (cdr x)))          x        )      )      (entget f)        )      )    )  )
  3.   (vl-cmdf "updatefield" e "")    (princ))
发表于 2010-6-27 20:47:00 | 显示全部楼层
ActiveX 应该也可以,改 Mtext FieldCode,可能没有 Entmode 方便
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-7-23 07:42 , Processed in 0.208725 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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