返回作品列表

网友作品 #000081 · 提交于 2026/08/09

CAD图纸信息提取工具:属性块数据汇总导出Excel

★★★☆☆零基础AI 编程工具国内其他模型autocadExcelVBA

作品作者

HUB零基础
开发工具
AI 编程工具
AI 模型
国内其他模型
使用 Skill
autocadExcelVBA
提交你的作品

作品简介

这是一套「图纸信息规范化 → 脚本提取 → 分类统计 → 写入 Excel」的落地方案,适配 AutoCAD / PressCAD 全版本。核心思路是优先用属性块(而非零散文字)作为图纸信息载体,之后自动遍历选中的属性块提取属性数据,按零件名称+规格汇总数量,生成可直接用 Excel 打开的汇总表。作者零基础,在 AI 辅助下整理出两套实现:AutoLISP 单图纸快速处理与 Python 多图纸批量处理。

核心亮点

  • 属性块规范先行:优先用属性块而非零散文字承载图纸信息,保证数据可被脚本批量提取
  • AutoLISP 快速方案:框选图纸属性块后自动提取,按零件名称+规格汇总数量,生成可直接用 Excel 打开的 CSV 汇总表
  • Python 批量方案:自动遍历文件夹内全部 DWG 图纸逐张提取统计,无需逐个打开图纸
  • 双 Sheet 输出:Excel 结果分「原始提取数据」与「分类汇总统计」两个工作表,记录来源图纸便于溯源
  • 属性标记可定制:零件名称、规格、材料、数量等属性标记可按自己的图纸修改对应
  • 两套方案互补:单张快查用 LSP 脚本,整批汇总用 Python,适配不同工作量

技术与工具

  • 方案一:AutoLISP 脚本,保存为 .lsp 文件后在 CAD 里用 APPLOAD 命令加载,处理单张图纸
  • 方案二:Python + pyautocad + openpyxl,批量遍历 DWG 文件夹并输出多 Sheet Excel
  • 适配范围:AutoCAD / PressCAD 全版本
  • 开发方式:零基础借助 AI 编程类工具与国内免费模型辅助完成

适用场景

  • 机械制造:批量提取零部件图纸属性信息,快速完成物料清单(BOM)统计汇总
  • 建筑工程:施工图构件信息批量提取与统计,提升造价核算、材料统计效率
原始提交内容(点开查看,可复制全文去问 AI)

先规范CAD图纸的信息载体(优先用属性块,而非零散文字) 用脚本提取目标数据 分类统计/汇总 写入Excel文件,以下提供2套工业界最常用的可落地方案,适配AutoCAD/PressCAD全版本。

遍历所有选中的属性块,提取属性数据 (setq data_list ’()) (setq i 0) (while (< i (sslength ss)) (setq blk_ref (ssname ss i)) (setq atts (entget (entnext blk_ref))) ; 提取块的所有属性 ; 把属性键值对存入列表(可根据你的属性标记修改这里) (setq temp_dict ’()) (foreach att atts (cond ((= (car att) 2) (setq tag (cdr att))) ; 属性标记(列名) ((= (car att) 1) (setq value (cdr att))) ; 属性值 ) (if (and tag value) (setq temp_dict (cons (cons tag value) temp_dict)) ) ) (if temp_dict (setq data_list (cons temp_dict data_list))) (setq i (1+ i)) )

分类统计:按零件名称+规格汇总数量(可按需修改统计规则) (setq stat_dict ’()) (foreach item data_list (setq part_name (cdr (assoc “PART_NAME” item))) ; 你的零件名称属性标记 (setq part_spec (cdr (assoc “PART_SPEC” item))) ; 你的零件规格属性标记 (setq part_qty (atoi (cdr (assoc “PART_QTY” item)))) ; 你的数量属性标记 (if (and part_name part_spec part_qty) (progn (setq key (strcat part_name “|” part_spec)) ; 按名称+规格作为唯一分类键 (if (assoc key stat_dict) (setq stat_dict (subst (cons key (+ (cdr (assoc key stat_dict)) part_qty)) (assoc key stat_dict) stat_dict)) (setq stat_dict (cons (cons key part_qty) stat_dict)) ) ) ) )

; 写入表头(和你的属性标记对应) (write-line “序号,零件名称,规格,总数量” file) ; 写入统计后的数据 (setq idx 1) (foreach item stat_dict (setq key (car item)) (setq qty (cdr item)) (setq name_spec (vl-string-split key “|”)) (setq line (strcat (itoa idx) “,” (car name_spec) “,” (cadr name_spec) “,” (itoa qty))) (write-line line file) (setq idx (1+ idx)) ) (close file)

(alert (strcat “汇总完成!文件已保存至:D:\CAD图纸汇总表.csv”)) (princ) ) 操作步骤

  1. 打开你的CAD/PressCAD图纸,确保属性块的标记和代码里的 PART_NAME/PART_SPEC/PART_QTY 对应(改成你自己的属性标记)。

  2. 把上面的代码复制到记事本,保存为 cad2excel.lsp 文件。

  3. 在CAD里输入 APPLOAD 命令,加载这个LSP文件。

选图纸里的所有属性块,脚本会自动提取、统计,在D盘生成可直接用Excel打开的汇总

前置依赖安装 pip install pyautocad openpyxl 完整功能代码 from pyautocad import Autocad, APoint from openpyxl import Workbook import os

连接AutoCAD(需提前打开AutoCAD软件)

acad = Autocad(create_if_not_exists=True) acad.prompt(“已连接到AutoCAD,开始提取数据…\n”)

#配置:你的属性标记、图纸文件夹路径 TAG_MAPPING = { “PART_NAME”: “零件名称”, “PART_SPEC”: “规格”, “PART_MATERIAL”: “材料”, “PART_QTY”: “数量” } DWG_FOLDER = “D:\你的CAD图纸文件夹” # 改成你的图纸存放路径 OUTPUT_EXCEL = “D:\CAD图纸批量汇总表.xlsx”

遍历文件夹里的所有DWG图纸,批量提取数据

all_data = [] for filename in os.listdir(DWG_FOLDER): if filename.endswith(“.dwg”): dwg_path = os.path.join(DWG_FOLDER, filename) # 打开图纸 doc = acad.app.Documents.Open(dwg_path) doc.Activate() acad.prompt(f“正在处理图纸:{filename}\n”)

    # 遍历图纸里的所有属性块
    for block in doc.Blocks:
        if block.IsAttributeBlock:
            for att in block.GetAttributes():
                # 提取属性数据
                item = {
                    "图纸名称": filename,
                    TAG_MAPPING.get(att.TagString, att.TagString): att.TextString
                }
                all_data.append(item)

分类统计:按零件名称+规格汇总总数量

stat_result = {} for item in all_data: name = item.get(“零件名称”, “”) spec = item.get(“规格”, “”) qty = int(item.get(“数量”, 0)) key = f”{name}|{spec}” if key in stat_result: stat_result[key][“总数量”] += qty else: stat_result[key] = { “零件名称”: name, “规格”: spec, “材料”: item.get(“材料”, “”), “总数量”: qty, “来源图纸”: item.get(“图纸名称”, “”) }

分2个Sheet:原始数据、汇总统计 wb = Workbook()

原始数据Sheet

ws_raw = wb.active ws_raw.title = “原始提取数据” if all_data: ws_raw.append(list(all_data[0].keys())) for item in )

汇总统计Sheet

ws_stat = wb.create_sheet(“分类汇总统计”) ws_stat.append([“序号”, “零件名称”, “规格”, “材料”, “总数量”, “来源图纸”]) for idx, item in enumerate(stat_result.values(), 1): ws_stat.append([idx, item[“零件名称”], item[“规格”], item[“材料”], item[“总数量”], item[“来源图纸”]])