lingyv 发表于 2021-8-13 23:50:27

如何统一修改cad表格中文字高度

如何用vba修改cad表格中的文字高度,一次性全部修改为统一高度。

tzfcn 发表于 2021-8-15 16:44:04

学习、掌握VBA,然后去实现。我不懂VBA,LISP代码找到一个供你参考:
;;;修改文字内容
(defun C:ZX10 ( / #k1 %k2 %k3 %k4 %k5 %k6 %k7 &k1 &kw1 i)
(setvar "cmdecho" 0)
(setvar "blipmode" 0)
(princ "\n请选择文字")
(setq &kw1 (ssget ":S" (list (cons 0 "TEXT"))) %k2 t);选择文字
(if (/= &kw1 nil);如果有选择
(progn
   (while %k2;循环修改
    (setq %k2 (ZX10~1));取得要修改的文字代码
    (if (/= %k2 nil);如果选择了
   (progn
      (setq %k3 (ZX10~2));那么取得要修改的内容
      (if (= %k3 nil) (setq %k2 nil) );如果没有取得内容就结束
   )
    )
    (if (/= %k3 nil);如果符合以上条件
   (progn
      (setq i 0 %k3 (cons 1 %k3));修改内容变为表里面的元素
      (repeat (sslength &kw1);对所有的文字进行查看
       (setq &k1 (ssname &kw1 i);取得一个对象
             #k1 (entget &k1);取得属性列表
             %k4 (assoc 1 #k1);取得内容元素
             %k6 (assoc 40 #k1);取得高度元素
             %k7 (cons 40 150);修改高度元素
             %k5 (cdr %k4);取得文字内容
       )
       (if (= %k2 %k5);如果文字内容符合
      (progn
         (setq #k1 (subst %k3 %k4 #k1));替换文字内容
         (setq #k1 (subst %k7 %k6 #k1));替换高度
         (entmod #k1);刷新文字
      )
       )
       (setq i (+ i 1));下一个
      )
   )
    )
   )
)
)
(prin1)
)

;;子程序;;
(defun ZX10~1 ( / %k1 &kw2)
(setq %k1 nil)
(princ "\n请选择要修改的文字内容")
(setq &kw2 (ssget ":S" (list (cons 0 "TEXT"))))
(if (/= &kw2 nil)
(progn
   (setq %k1 (cdr (assoc 1 (entget (ssname &kw2 0)))))
   (princ "\n选择文字为")
   (princ %k1)
)
)
%k1
)
;;;子程序;;
(defun ZX10~2 ( / %k1 &kw2)
(setq %k1 nil)
(princ "\n请选择要替换的内容")
(setq &kw2 (ssget ":S" (list (cons 0 "TEXT"))))
(if (/= &kw2 nil)
(progn
   (setq %k1 (cdr (assoc 1 (entget (ssname &kw2 0)))))
   (princ "\n修改内容为")
   (princ %k1)
)
)
%k1
);内容复制到记事本,以【ZX10.lsp】命名,加载到autoLISP,命令:ZX10

aisong220 发表于 2021-8-16 00:01:35

{:1_10:}{:1_14:}

lingyv 发表于 2021-8-16 02:28:03

本帖最后由 lingyv 于 2021-8-16 02:33 编辑

tzfcn 发表于 2021-8-15 16:44
学习、掌握VBA,然后去实现。我不懂VBA,LISP代码找到一个供你参考:
;;;修改文字内容
(defun C:ZX10 ( / ...
谢谢回复!不过我不是要修改text文字对象,是table表中的文字:就是先选择表,然后直接改整个表的文字高度为一个统一的高度。也不要一个个单元循环改,这个太慢了。表格内容多就卡死。用vba可以这样循环改:   For i = 0 To mytable.Rows - 1
         For j = 0 To mytable.Columns - 1
            Call mytable.SetCellTextHeight(i, j, 2.5)
         Next j
   Next i

内容多了就卡死了。平时手动操作,选择整个表后,直接在属性窗口中修改文字高度就可以完成,速度也很快……

tzfcn 发表于 2021-8-16 06:47:02

lingyv 发表于 2021-8-16 02:28
谢谢回复!不过我不是要修改text文字对象,是table表中的文字:就是先选择表,然后直接改整个表的文字高 ...

查找帮助里字的属性,其中有字高的属性,然后进行修改。
无论VBA还是LISP,道理是一样的。

yuren008 发表于 2021-8-16 09:47:42

做个对论坛有益的人。

qqqincccken 发表于 2021-8-17 00:06:11

謝謝樓上的大神學習了

aisong220 发表于 2021-8-17 00:07:22

{:1_9:}{:1_13:}

yangjian001 发表于 2021-8-17 08:39:51

做一个热心并受欢迎的人!

mikewolf2k 发表于 2021-8-17 09:09:02

AcadTable.GetCellTextHeight/SetCellTextHeight
必须遍历每个单元格,每个单元格文字大小独立设置。
页: [1]
查看完整版本: 如何统一修改cad表格中文字高度