如何在AutoCAD 2024中用Lisp提取块属性并保存到Excel文件
在AutoCAD 2024中用LISP提取块属性并保存到Excel
需求背景
无法使用AutoCAD的DATAEXTRACTION功能,需通过LISP程序提取AutoCAD 2024中的块属性,并将结果保存为Excel可直接打开的CSV文件,提升工作效率。
修改后的LISP代码
以下代码专门针对块属性提取,替代原通用实体提取代码:
(defun c:extract-block-attributes () ;; 让用户选择要处理的DWG文件 (setq dwg-file (getfiled "选择CAD文件" "" "dwg" 1)) ;; 让用户指定输出CSV文件路径 (setq output-file (getfiled "保存CSV文件" "" "csv" 2)) (if (and dwg-file output-file) (extract-block-attrs-to-csv dwg-file output-file) (princ "\n操作已取消。") ) ) (defun extract-block-attrs-to-csv (dwg-file output-file) (setq attr-data-list '()) (vl-load-com) (setq acad (vlax-get-acad-object)) (vl-catch-all-apply '(lambda () (setq doc (vla-open acad dwg-file)) (if doc (progn (setq ms (vla-get-modelspace doc)) ;; 遍历模型空间所有实体 (setq entity (vla-item ms 0)) (while entity ;; 仅处理块参照对象 (if (= (vla-get-objectname entity) "AcDbBlockReference") (progn ;; 检查块是否有属性定义 (if (> (vla-get-numberofattributes entity) 0) (progn (setq attrs (vla-getattributes entity)) ;; 提取块名、属性标签和属性值 (setq block-name (vla-get-name (vla-get-blockdefinition entity))) (foreach attr attrs (setq attr-tag (vla-get-tagstring attr)) (setq attr-value (vla-get-textstring attr)) ;; 将数据存入列表:块名、属性标签、属性值 (setq attr-data-list (cons (list block-name attr-tag attr-value) attr-data-list)) ) ) ) ) ) ;; 移动到下一个实体 (setq entity (vla-next entity)) ) (vla-close doc) ;; 写入CSV文件 (setq f (open output-file "w")) ;; 写入表头 (write-line "\"块名\",\"属性标签\",\"属性值\"" f) ;; 写入数据行 (foreach data (reverse attr-data-list) (write-line (strcat "\"" (nth 0 data) "\"," "\"" (nth 1 data) "\"," "\"" (nth 2 data) "\"" ) f ) ) (close f) (princ (strcat "\n块属性提取完成,结果已保存至:" output-file)) ) ) ) ) ) ;; 加载时自动运行命令(可选,也可手动输入EXTRACT-BLOCK-ATTRIBUTES) ;; (c:extract-block-attributes)
代码说明
- 仅筛选
AcDbBlockReference类型的对象,确保只处理块参照 - 检查块是否包含属性定义,避免无属性的块干扰
- 提取块名、属性标签、属性值三类核心数据
- 生成带表头的CSV文件,Excel可直接打开编辑
- 增加用户自定义输出路径的选项,比固定路径更灵活
使用方法
- 将上述代码保存为
.lsp格式文件(比如BlockAttrExtract.lsp) - 在AutoCAD 2024中输入
APPLOAD命令,加载该LISP文件 - 输入命令
EXTRACT-BLOCK-ATTRIBUTES,按提示选择要处理的DWG文件,再指定CSV保存路径 - 完成后打开指定路径的CSV文件,即可在Excel中查看提取的块属性
内容的提问来源于stack exchange,提问作者user758604
相关产品推荐
相关产品推荐

