明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3127|回复: 4

紧急求助:如何用程序实现批量替换图中的文字

[复制链接]
发表于 2007-3-9 16:35 | 显示全部楼层 |阅读模式
小弟碰到修改图纸的问题,只需将图中所有的文本或属性值3L06改成4L06或类似,一共有1000多文件,一个文件一个文件用查找替换的方法可以做到,但是工作量很大,而且一不小心就漏掉某些文件,文件名是没有规律的.
请高人指点如何可以做到批量更改,我在论坛上看到有兄弟写的LISP程序试了一下,但是总不成功, 我用的是2004版本,另外我对LISP一无所知,那位兄弟的源代码如下:
  1. ;;一个VLISP的批量处理范例
  2. ;;从这个范例可以了解VLISP如何批量处理图档
  3. ;;虽然速度慢了点,但非常实用
  4. ;;By LUCAS(龙龙仔)
  5. ;;批量修改文字
  6. ;;
  7. ;;虽配合Expresstools__(acetutil.arx)
  8. ;;为加速程序执行,程序将设定系统变量ACADLSPASDOC
  9. ;;即<只载入 acad.lsp 至 AutoCAD 执行期所开启的第一个图面>
  10. ;;当然程序结束后,会还原系统变量ACADLSPASDOC
  11. ;;
  12. ;;For AutoCad 2000+  
  13. (arxload "acetutil.arx" NIL)
  14. (vl-load-com)
  15. (defun CH_TXT (OLDTXT NEWTXT / HOLDECHO APP DWGNAME
  16. PREFIX_DWG NN QQ HOLDLSP WW
  17. ENT N
  18. )
  19. (setq HOLDECHO (getvar "cmdecho"))
  20. (setvar "cmdecho" 0)
  21. (setq PREFIX_DWG
  22. (strcat
  23. (vl-string-right-trim
  24. "\"
  25. (strcase (acet-ui-pickdir
  26. "选择目录"
  27. (vl-string-right-trim "\" (getvar "dwgprefix"))
  28. "批量修改文字"
  29. )
  30. )
  31. )
  32. "\"
  33. )
  34. )
  35. (setq HOLDLSP (getvar "ACADLSPASDOC"))
  36. (setvar "acadlspasdoc" 0)
  37. (setq QQ (vl-directory-files PREFIX_DWG "*.DWG"))
  38. (setq NN 0)
  39. (if (/= QQ NIL)
  40. (progn
  41. (setq APP (vlax-get-acad-object))
  42. (repeat (length QQ)
  43. (setq DWGNAME (strcase (strcat PREFIX_DWG (nth NN QQ))))
  44. (setq WW (vla-open (vla-get-documents APP) DWGNAME))
  45. (vlax-for N (vla-get-blocks WW)
  46. (vlax-for ENT N
  47. (if (and (vlax-property-available-p ENT 'TEXTSTRING)
  48. (wcmatch (setq STR (vla-get-textstring ENT))
  49. (strcat "*" OLDTXT "*")
  50. )
  51. )
  52. (progn
  53. (setq STR (vl-string-subst NEWTXT OLDTXT STR))
  54. (vla-put-textstring ENT STR)
  55. )
  56. )
  57. )
  58. )
  59. (vla-save WW)
  60. (prompt (strcat "\n" DWGNAME " <修改Text完成>!!!"))
  61. (vla-close WW :vlax-false)
  62. (setq NN (1+ NN))
  63. )
  64. (vlax-release-object WW)
  65. (vlax-release-object APP)
  66. )
  67. (prompt "\n所选目录中未有任何图档!!!")
  68. )
  69. (setvar "acadlspasdoc" HOLDLSP)
  70. (setvar "cmdecho" HOLDECHO)
  71. (princ)
  72. )
  73. (princ)
我加载运行了几次,结果都是无功而返,要么出现"参数太少",要么就是"变量类型错误",因为在下看不懂原码,也不知道如何处理,请各位高手帮我解决这个问题......先谢谢各位!!!!!!
命令: CH_TXT
; 错误: 参数太少
命令:
发表于 2007-3-10 10:09 | 显示全部楼层

(CH_TXT OLDTXT NEWTXT )

比如 (CH_TXT "±" "%" )

 楼主| 发表于 2007-3-10 15:18 | 显示全部楼层

谢谢楼上兄弟!!!

我试一下先,就是变量声名改一下就好吗? 兄弟还有别的建议吗? 因为真的比较急,我也来不及做功课学LISP了,希望得到各位多多指点!!!

 楼主| 发表于 2007-3-12 10:36 | 显示全部楼层
本帖最后由 作者 于 2007-3-14 12:50:50 编辑

属性值不可以修改,只能改单行文本和多行文本.

能把块属性值也改了吗?程序应该怎样改?

 楼主| 发表于 2007-3-15 16:34 | 显示全部楼层

属性值的批量修改不能吗

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

本版积分规则

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

GMT+8, 2024-5-19 03:36 , Processed in 0.151970 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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