马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
对于图中有大量的块属性的,如果要修改非常麻烦,有没有快速的方法?
下面我们结合EXCEL软件和XDRX API的EXCEL库来批量修改块属性。
如下图,建筑的标号,文字是属性,如果在工作中,我们希望把某个编号后的所有编号都增加个整数,如果要手工操作那要非常的痛苦,尤其对于编号遍布在图中,很容易落下。
那么我们把所有的编号都提取到EXCEL软件中,利用EXCEL软件的优势,把所有需要的编号都增加个整数后,然后在读到图中修改。
通过下面的代码,把属性提取到EXCEL文件
 - (defun c:tt ()
- (if (setq ss (ssget '((0 . "INSERT") (2 . "XDTB_JZ_LH"))))
- (progn
- (setq header (list "ID" "编号"))
- (setq data (mapcar
- '(lambda (x)
- (setq e (entnext x))
- (list (xdrx_getpropertyvalue e "Handle") (atoi (xdrx_getpropertyvalue e "TextString")))
- )
- (xdrx_pickset->ents ss)
- )
- )
- (setq data (cons header (reverse data)))
- (if (and (setq book (xdex_book_open))
- (xdex_book_addsheet "编号" t)
- )
- (progn
- (xdex_cell_writerange 0 0 data)
- (xdex_book_save "编号.xls")
- (xdex_book_close)
- (princ "\n文件保存成功.")
- )
- )
- )
- )
- (princ)
- )
通过EXCEL的选择性粘贴,把框选的大于6的编号都加上3.
在通过下面的代码,把修改后的EXCEL文件里面的编号一次性写到CAD里面,达到批量修改块属性的目的。
 - (defun c:tt1 ()
- (if (and
- (setq book (xdex_book_open "编号.xls"))
- (xdex_book_setActiveSheet "编号")
- (setq data (xdex_cell_readrange))
- (setq data (cdr data))
- )
- (progn
- (mapcar
- '(lambda (x)
- (setq handle (cadar x)
- e (handent handle)
- )
- (if (/= (xdrx_getpropertyvalue e "TextString") (setq str
- (rtos
- (cadadr x)
- 2 0
- )
- )
- )
- (xdrx_setpropertyvalue e "TextString" str "color" 1)
- )
- )
- data
- )
- )
- )
- (princ)
- )
图中红色的的是修改的块属性。
|