1028695446 发表于 2019-4-24 09:38:14

【多行文字格式清除】

;;多行文字样式清除
(defun C:mtx(/ ss i ent elist )
        (if (setq ss(ssget '((0 . "TEXT,MTEXT"))))
                (progn
                        (setq i 0)
                        (repeat (sslength ss)
                                (setq ent (ssname ss i))
                                (setq elist (entget ent))
                                (entmod
                                        (subst
                                                (cons 1
                                                        (mtext2text (cdr(assoc 1 elist)))
                                                )
                                                (assoc 1 elist)
                                                elist                                       
                                        )       
                                )
                                (setq i (1+ i))                       
                        )
                )
        )
)

;提取多行文字,去除无用格式符号--来自明经
(defun mtext2text(MTextString / regex s)
        (setq regex(vlax-create-object "Vbscript.RegExp")) ;引用正则表达式控件
        (vlax-put-property regex "IgnoreCase" 0) ;不忽略大小写
        (vlax-put-property regex "Global" 1) ;匹配方式,全文字匹配
        (setq s MTextString)
        ;替换\\字符
        (vlax-put-property regex "Pattern" "\\\\\\\\")
        (setq s(vlax-invoke-methodregex "Replace" s (chr 1)))
        ;替换\{字符
        (vlax-put-property regex "Pattern" "\\\\{")
        (setq s(vlax-invoke-methodregex "Replace" s (chr 2)))
        ;替换\}字符
        (vlax-put-property regex "Pattern" "\\\\}")
        (setq s(vlax-invoke-methodregex "Replace" s (chr 3)))
        ;删除段落缩进格式
        (vlax-put-property regex "Pattern" "\\\\pi(.[^;]*);")
        (setq s(vlax-invoke-methodregex "Replace" s ""))
        ;删除制表符格式
        (vlax-put-property regex "Pattern" "\\\\pt(.[^;]*);")
        (setq s(vlax-invoke-methodregex "Replace" s ""))
        ;删除堆迭格式
        (vlax-put-property regex "Pattern" "\\\\S(.[^;]*)(\\^|#|\\\\)(.[^;]*);")
        (setq s(vlax-invoke-methodregex "Replace" s ""))
        ;删除字体、颜色、字高、字距、倾斜、字宽、对齐格式
        (vlax-put-property regex "Pattern" "(\\\\F|\\\\f|\\\\C|\\\\H|\\\\\T|\\\\Q|\\\\W|\\\\A)(.[^;]*);")
        (setq s(vlax-invoke-methodregex "Replace" s ""))
        ;删除下划线、删除线格式
        (vlax-put-property regex "Pattern" "(\\\\L|\\\\O|\\\\l|\\\\o)")
        (setq s(vlax-invoke-methodregex "Replace" s ""))
        ;删除不间断空格格式
        (vlax-put-property regex "Pattern" "\\\\~")
        (setq s(vlax-invoke-methodregex "Replace" s ""))
        ;删除换行符格式
        (vlax-put-property regex "Pattern" "\\\\P")
        (setq s(vlax-invoke-methodregex "Replace" s ""))
        ;删除换行符格式(针对Shift+Enter格式)
        (vlax-put-property regex "Pattern" "\n")
        (setq s(vlax-invoke-methodregex "Replace" s ""))
        ;删除{}
        (vlax-put-property regex "Pattern" "({|})")
        (setq s(vlax-invoke-methodregex "Replace" s ""))
        ;替换回\\,\{,\}字符
        (vlax-put-property regex "Pattern" "\\x01")
        (setq s(vlax-invoke-methodregex "Replace" s "\\"))
        (vlax-put-property regex "Pattern" "\\x02")
        (setq s(vlax-invoke-methodregex "Replace" s "{"))
        (vlax-put-property regex "Pattern" "\\x03")
        (setq s(vlax-invoke-methodregex "Replace" s "}"))
       
        (vlax-release-object regex)
        s
)

gaics 发表于 2024-4-18 13:15:33

ferious 发表于 2023-12-26 12:53
清理格式后怎么换行变了?能帮忙看下吗

“换行”也是一种格式,都清除了

juliana207 发表于 2024-6-7 15:22:40

就像保留分数, 删了 "删除堆迭格式", 不过分数变大了怎么办?

664571221 发表于 2021-11-13 15:48:43

你好群主错误: no function definition: VLAX-CREATE-OBJECT

llp0420 发表于 2019-5-7 17:22:51

牛逼

llp0420 发表于 2019-5-7 17:23:08

用上了

艾皮凯克 发表于 2020-11-10 14:27:44

感谢,比smt好用

wosiguwozai0830 发表于 2022-7-6 14:39:38

很好用,感谢!

vladimirputin 发表于 2023-2-11 08:48:44

非常好的代码,谢谢楼主分享啊。

jkop 发表于 2023-11-29 19:18:37

简单好用,收藏!

ferious 发表于 2023-12-26 12:53:38

清理格式后怎么换行变了?能帮忙看下吗

gaics 发表于 2024-4-17 17:53:04

当文字比较长、elist组码出现“3”时怎么处理?
页: [1] 2
查看完整版本: 【多行文字格式清除】