秋枫 发表于 2010-6-24 17:39:00

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

本帖最后由 作者 于 2010-6-27 22:43:44 编辑 <br /><br /> <p>从Excel中粘贴进AutoCAD的表格对象中的单元格文字常常带有格式,很不方便。</p>
<p>&nbsp;</p>
<p>一个一个去很麻烦。写了一个程序可以去掉MTEXT格式。利用以前mccad提供的Regexp代码。</p>
<p>&nbsp;</p>
<p>现在的问题是,如果表格中有公式就有大问题。试了多种方法都不成。(我在AutoCAD 2010中测试)</p>
<p>&nbsp;</p>
<p>附件提供测试图和程序。求高手解决。</p><p><br/></p><p>------------------</p><p>已解决, 完整解决方案在12楼。</p><p><br/></p>

masterlong 发表于 2010-6-25 21:06:00

<p>提供个思路看看对秋大侠有没帮助</p>
<p>选定要复制的区域后 &nbsp;ctrl+c</p>
<p>“选择性粘贴”选“数值”再确定</p>
<p>或者通过记事本转一道</p>
<p>这样选定区域内就没有公式了</p>

mccad 发表于 2010-6-25 21:17:00

不知需要什么效果

狂刀lxx 发表于 2010-6-26 02:46:00

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

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

秋枫 发表于 2010-6-26 20:38:00

我需要保留公式。<div><br/></div><div>去除所有的MTEXT覆盖,包括含公式的单元格。</div><div><br/></div><div>现在是一运行程序,即使不对含公式的单元格操作,含公式的格子也会变成 ####</div>

Ea 发表于 2010-6-26 22:12:00

试试这个

(defun c:tt (/ e)
(if (setq e (car (entsel)))
    (entmod
      (mapcar (function (lambda (x / code)
   (setq code (car x))
   (if (member code '(1 300 302))
       (cons code (mtext2text (cdr x)))
       x
   )
   )
       )
       (entget e)
      )
    )
)
(princ)
)

mccad 发表于 2010-6-26 22:33:00

看来还是非常特殊的东西,难道公式又不能通过程序来搞,真被桌子搞晕掉。

Ea 发表于 2010-6-26 23:47:00

本帖最后由 作者 于 2010-6-27 20:07:51 编辑 <br /><br /> mccad发表于2010-6-26 22:33:00static/image/common/back.gif看来还是非常特殊的东西,难道公式又不能通过程序来搞,真被桌子搞晕掉。


<p>公式就是 FIELD,Table&nbsp;&nbsp;&nbsp; Dxf 中的 344 实体就是FIELD,FIELD 的 DXF 中 360 实体的 DXF 可以找到公式的表达式&nbsp;</p>
<p>&nbsp;</p>
<p><font face="Verdana">_$ (setq el (entget (car (entsel))))<br/>((-1 . &lt;图元名: 7ffffbd30e0&gt;) (0 . "ACAD_TABLE") (330 . &lt;图元名: 7ffffbf9820&gt;) (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 . &lt;图元名: 7ffffbf9de0&gt;) (343 . &lt;图元名: 7ffffbd39c0&gt;) (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) <font style="BACKGROUND-COLOR: #ffff00">(1 . "{\\f宋体|b0|i0|c134;\\C7;总建筑面积")</font> (94 . 0) (300 . "")<font style="BACKGROUND-COLOR: #ffff00"> </font><font color="#ff00ff"><font style="BACKGROUND-COLOR: #ffff00">(302 . "{\\f宋体|b0|i0|c134;\\C7;总建筑面积")</font> </font>(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) <font style="BACKGROUND-COLOR: #ffff00">(300 . "%lu2%tf[{\\f宋体|b0|i0|c134;\\C7;]") (302 . "{\\f宋体</font><font style="BACKGROUND-COLOR: #ffff00">|b0|i0|c134;\\C7;44916.00")&nbsp;</font></font>&nbsp;&nbsp;&nbsp; ......</p>
<p>&nbsp;</p>
<p><font face="Verdana">_$ (setq lst (vl-remove-if-not '(lambda (x) (= (car x) 344)) el))<br/>((344 . &lt;图元名: 7ffffbd38e0&gt;) (344 . &lt;图元名: 7ffffbd3900&gt;) (344 . &lt;图元名: 7ffffbd3920&gt;) (344 . &lt;图元名: 7ffffbd3940&gt;) (344 . &lt;图元名: 7ffffbd3960&gt;) (344 . &lt;图元名: 7ffffbd3980&gt;) (344 . &lt;图元名: 7ffffbd39a0&gt;))<br/>_$ <br/></p>
<p><font face="Verdana">_$ (entget (cdar lst))<br/>((-1 . &lt;图元名: 7ffffbd38e0&gt;) (0 . "FIELD") (5 . "10E") (102 . "{ACAD_REACTORS") (330 . &lt;图元名: 7ffffbd4970&gt;) (102 . "}") (330 . &lt;图元名: 7ffffbd4970&gt;) (100 . "AcDbField") (1 . "_text") <font style="BACKGROUND-COLOR: #ffff00">(2 . "{\\fSimSun|b0|i0|c134|p2;\\C7;%&lt;\\_FldIdx 0&gt;%}") </font>(90 . 1) <font style="BACKGROUND-COLOR: #ffff00">(360 . &lt;图元名: 7ffffbd38f0&gt;)</font> (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))<br/>_$ </font></p>
<p>&nbsp;</p>
<p><font face="Verdana">_$ (entget (cdr (assoc 360 (entget (cdar lst)))))<br/>((-1 . <font style="BACKGROUND-COLOR: #ffff00">&lt;图元名: 7ffffbd38f0</font>&gt;) (0 . "FIELD") (330 . &lt;图元名: 7ffffbd38e0&gt;) (5 . "10F") (100 . "AcDbField") (1 . "AcExpr")<font color="#ff00ff"> (2 . "\\AcExpr (B2*B3) \\f \"%lu2\"")</font> (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))<br/></font></p>
<p></font>&nbsp;</p>

秋枫 发表于 2010-6-27 13:17:00

搞定。ActiveX方式没有办法。只能用dxf方式。

(defun massoc (key alist / x nlist)(foreach x alist    (if(eq key (car x))      (setq nlist (cons (cdr x) nlist))    ))(reverse nlist))

(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)      )      )    ))
(vl-cmdf "updatefield" e "")    (princ))

Ea 发表于 2010-6-27 20:47:00

ActiveX 应该也可以,改 Mtext FieldCode,可能没有 Entmode 方便
页: [1] 2 3
查看完整版本: 已解决:使用VLISP去除表格单元格文字格式