You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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可直接打开编辑
  • 增加用户自定义输出路径的选项,比固定路径更灵活

使用方法

  1. 将上述代码保存为.lsp格式文件(比如BlockAttrExtract.lsp)
  2. 在AutoCAD 2024中输入APPLOAD命令,加载该LISP文件
  3. 输入命令EXTRACT-BLOCK-ATTRIBUTES,按提示选择要处理的DWG文件,再指定CSV保存路径
  4. 完成后打开指定路径的CSV文件,即可在Excel中查看提取的块属性

内容的提问来源于stack exchange,提问作者user758604

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 12:55:00