求款可以利用读取EXCEL表格,批量替换CAD图中文字的lisp,请大神赐教,十分感谢!
求款可以利用读取EXCEL表格,批量替换CAD图中文字的lisp,请大神赐教,十分感谢!东拉西扯来的,凑合用吧
(defun c:plth ()
(vl-load-com)
(setvar "cmdecho" 0)
(defun Excel-Get-CellValue (xlapp cell)
(setq xlsrng (vlax-get-property xlapp "range" cell))
(setq xlsval (vlax-variant-value (vlax-get-property xlsrng "Value"))))
(defun th ()
(setq ss (ssget "X" '((0 . "TEXT"))) i 0)
(while (< i (sslength ss))
(setq e (ssname ss i)
st (entget e)
text (cdr (assoc 1 st)))
(while (setq ks (vl-string-search st1 text))
(setq len(strlen text)
len1 (strlen st1)
fro(substr text 1 ks)
bak(substr text (+ 1 ks len1)))
(setq text (strcat fro st2 bak))
(entmod (subst (cons 1 text) (assoc 1 st) st)))
(setq i (1+ i))
))
(setq xfile (getfiled "选择包含替换内容的EXCEL文件" "" "xls;xlsx" 8))
(if (setq fn (findfile xfile))
(if (setq xlapp (vlax-get-or-create-object "Excel.Application"))
(progn
(vlax-invoke-method (vlax-get-property xlapp 'WorkBooks) 'Open fn)
(setq row 2)
(while (setq st1 (Excel-Get-CellValue xlapp (strcat "A" (rtos row))))
(setq st2 (Excel-Get-CellValue xlapp (strcat "B" (rtos row))))
(th)
(setq row (1+ row))
)
(vlax-invoke-method xlapp 'quit)
(vlax-release-object xlapp)
);progn
);if
);if
(setvar "cmdecho" 1)
(princ)
)
(prompt "读取EXCEL文件进行文字替换,命令:plth")(princ) 命令行输入PLTH,在弹窗选择EXCEL文件并打开 pxr201419 发表于 2019-9-8 12:55
命令行输入PLTH,在弹窗选择EXCEL文件并打开
老师lisp源码可以发享下吗?发邮箱也行254762580@qq.com,谢谢老师 pxr201419 发表于 2019-9-8 13:58
东拉西扯来的,凑合用吧
(defun c:plth ()
(vl-load-com)
亲试好用的,十分感谢分享 感谢分享。。。。。。。 请问excel怎么编辑呢?有没有什么固定的格式啊 嘎小闹 发表于 2019-9-9 11:04
请问excel怎么编辑呢?有没有什么固定的格式啊
A列放原来的文字,B列放替换后的文字,所有要替换的内容不要隔行就行了 十分感谢分享 pxr201419 发表于 2019-9-9 11:36
A列放原来的文字,B列放替换后的文字,所有要替换的内容不要隔行就行了
下载您的样例就可以改 自己随便编辑一下 然后按照您的样例就改不了 不知道问题出在哪了啊 嘎小闹 发表于 2019-9-10 10:42
下载您的样例就可以改 自己随便编辑一下 然后按照您的样例就改不了 不知道问题出在哪了啊
上传你的EXCEL文件和dwg文件 pxr201419 发表于 2019-9-10 11:07
上传你的EXCEL文件和dwg文件
我就简单做的样例请大神帮我看看我的问题出在哪为什么不能替换呢?
嘎小闹 发表于 2019-9-10 20:44
我就简单做的样例请大神帮我看看我的问题出在哪为什么不能替换呢?
1、前面程序编得粗糙,只适用于单行文字,没有考虑多行文字,你的图中文字为多行文字。将第8行改为
(setq ss (ssget "X" '((0 . "*TEXT"))) i 0) 就可以了。
2、第28、29行改一下,原来程序的不严谨:
(while (setq st1 (Excel-Get-CellValue xlapp (strcat "A" (rtos row 2 0))))
(setq st2 (Excel-Get-CellValue xlapp (strcat "B" (rtos row 2 0))))
多谢你的测试,有问题再说。
pxr201419 发表于 2019-9-10 22:38
1、前面程序编得粗糙,只适用于单行文字,没有考虑多行文字,你的图中文字为多行文字。将第8行改为
(se ...
感谢大神指点 好用了刚刚亲测的但是缺点是:单行文字不能修改了只能修改多行文字还想请教一下 大神能不能帮忙做一个可以根据实测点的坐标和高程来生成横断面的插件啊 十分感谢分享
页:
[1]
2