Ashish123 发表于 2022-7-5 15:12:19

如何通过AutoLI擦除表格

大家好,
 
我正在尝试从我的绘图中删除一个表。请查看随附的示例图纸。我有8000多张图纸要修改。所有图纸包含3个表格,如示例图纸所示。
 
我想删除表3。表3的位置可以是边界内的任何位置。
 
尝试了很多事情。但到目前为止运气不好。
 
现在我有一个autolisp,如果我在一个图形中运行它,它可以很好地工作。但它在运行脚本时不起作用。
 
(defun c:abcd()
(setq ss1(ssget))
(命令“erase”“p”)
(命令“zoom”“e”)
(命令“qsave”)
(普林斯)
)
 
我有一个脚本,加载包含上述代码的autolisp。
 
任何帮助都将不胜感激。
测试图纸。图纸

BIGAL 发表于 2022-7-5 15:40:16

如果它是一个有4列的表,则可以完成。警告一句,一旦保存的表消失,这将是破坏性的。我会测试一些已经复制的。我会首先支持他们。
 
 

(defun AH:deltable ( / x y)
(setvar 'ctab "Model")
(setq y 4)
(setq ss (ssget "X" (list (cons 0 "ACAD_TABLE"))))
(repeat (setq x (sslength ss))
(setq obj (vlax-ename->vla-object(ssname ss (setq x (- x 1)))))
(setq cols (vla-get-Columns obj))
(if (= cols Y)(vla-delete obj))
)
)
(AH:deltable)

 
 

open dwg1 (load "deltable") close Y
open dwg2 (load "deltable") close Y
open dwg3 (load "deltable") close Y

Ashish123 发表于 2022-7-5 15:47:03

嗨,比格尔,
 
非常感谢您的回复。它就像一个符咒。
 
我注意到的唯一一件事是,当我有一个包含4列的表时,您的代码可以工作。有没有办法修改代码以删除包含4行或更多行的表。?
 
再次感谢您。

Ashish123 发表于 2022-7-5 16:08:41

我已经将您的代码修改为以下代码&它像一个符咒一样工作。
 
(defun AH:deltable(/x y)
(setvar“ctab”模型)
(setq x 4)
(setq ss(ssget“X”(列表(cons 0“ACAD_表”)))
(重复(setq y(sslength ss))
(setq obj(vlax ename->vla object(ssname ss(setq y(-y 1 k)а)'))
(setq rows(vla get rows obj))
(如果(>=第x行)(vla删除obj))
)
)
(AH:可删除)
 
 
非常感谢你。

BIGAL 发表于 2022-7-5 16:13:58

很高兴听到它帮助了一个简单的解决方案。
页: [1]
查看完整版本: 如何通过AutoLI擦除表格