CAD快速统计文字数量
在CAD图纸中,经常需要统计不同文字内容的出现次数,比如房间名称、设备编号、材料标注等。当文字种类达到十几种甚至几十种时,手动计数或重复使用“快速选择”会非常低效。本文将介绍几种实用的统计方法,并重点给出一种能够在图纸内自动生成统计表格的完整解决方案。
一、常见统计方法对比
| 方法 | 核心操作 | 适用场景 | 是否支持一键分类 |
|---|---|---|---|
TEXTCOUNT / TC |
直接输入命令,全选文字 | 只需文字总数 | 否 |
查找和替换 (FIND) |
输入具体文字串,查看匹配数 | 统计某一种特定文字 | 否(每次一种) |
快速选择 (QSELECT) |
按“内容”特性筛选指定文字 | 文字种类较少时 | 否(需重复操作) |
| 数据提取 + Excel | 将文字内容导出为CSV/XLS,用透视表统计 | 任意数量种类,一次性导出 | 是 |
| 专用LISP插件 | 运行程序,自动生成表格 | 频繁需要统计并出表 | 是 |
当文字种类达到16种以上时,数据提取法和LISP插件法是最佳选择。
二、方法一:数据提取 + Excel(无需插件)
该方法利用AutoCAD自带的“数据提取”功能,将所有文字内容导出到外部表格,再借助Excel的数据透视表完成分类计数。
操作步骤
-
启动数据提取
命令行输入DATAEXTRACTION(或DX),回车。 -
创建新提取
选择“创建新提取”,为.dxe文件命名并保存。 -
选择对象
- 选择“在当前图形中选择对象”
- 点击“选择对象”,框选整个图形或按
Ctrl+A全选 - 确认后进入下一步。
-
选择对象类型
在对象类型列表中只勾选“文字”和“多行文字”。(若需统计块内文字或属性文字,可额外勾选相应类型) -
选择特性
只勾选“内容”(TextString / Content),其余特性(如图层、位置)可不选,以保持数据纯净。 -
优化输出
推荐不合并相同行,保留每条原始记录,以便后续在Excel中灵活透视。 -
输出到外部文件
选择输出格式为XLS或CSV,指定保存路径,完成导出。
Excel中统计
- 打开导出的文件,选中“内容”列。
- 插入“数据透视表”,将“内容”拖入“行”区域和“值”区域(计数)。
- 立即得到所有不同文字及其出现次数,无论多少种,整个过程只需几分钟。
三、方法二:专用LISP插件(生成图纸内表格)
如果需要直接在CAD图形中生成表格(TABLE对象),并且希望以后反复快速运行,可以加载以下AutoLISP程序。该程序会:
- 让用户框选(或全选)文字对象
- 统计每种文字内容的出现次数
- 按内容升序排序
- 在当前图形中创建一个两列表格:“文字内容”和“数量”
完整LISP代码
将以下代码保存为 TextCountTable.lsp(编码ANSI):
;;; ============================================================
;;; 文字内容统计并生成 AutoCAD 表格 (TABLE)
;;; 命令: TCT
;;; 功能: 统计所选文字对象(单行/多行)的内容,生成统计表格
;;; ============================================================
(defun c:TCT (/ ss i ent txt lst pair item pt rowCnt tblObj
colWidth1 colWidth2 rowHeight tblHeight)
(princ "\n请选择需要统计的文字对象 (可框选或直接回车选择全部): ")
;; 选择文字对象(支持单行文字、多行文字)
(setq ss (ssget '((0 . "*TEXT"))))
(if (null ss)
(progn
(alert "没有选中任何文字对象,程序退出。")
(exit)
)
)
;; 统计文字内容
(setq i 0)
(while (< i (sslength ss))
(setq ent (entget (ssname ss i))
txt (cdr (assoc 1 ent))
)
;; 忽略空字符串
(if (and txt (/= txt ""))
(if (setq pair (assoc txt lst))
(setq lst (subst (cons txt (1+ (cdr pair))) pair lst))
(setq lst (cons (cons txt 1) lst))
)
)
(setq i (1+ i))
)
;; 检查统计结果
(if (null lst)
(progn
(alert "所选文字中没有有效内容。")
(exit)
)
)
;; 按文字内容排序 (升序)
(setq lst (vl-sort lst '(lambda (a b) (< (car a) (car b)))))
;; 显示简要统计信息
(princ (strcat "\n共统计 " (itoa (sslength ss)) " 个文字对象,"
(itoa (length lst)) " 种不同内容。\n"))
;; 准备表格参数
(setq rowCnt (1+ (length lst)) ; 总行数 = 表头 + 数据行
colWidth1 30.0 ; 第一列宽度 (内容列)
colWidth2 15.0 ; 第二列宽度 (数量列)
rowHeight 8.0 ; 行高
tblHeight (* rowHeight rowCnt)
)
;; 获取插入点(表格左上角)
(initget 1) ; 不允许空输入
(setq pt (getpoint "\n请指定表格左上角插入点: "))
;; 创建 AutoCAD 表格对象 (ActiveX)
(setq acadObj (vlax-get-acad-object)
doc (vla-get-ActiveDocument acadObj)
mSpace (vla-get-ModelSpace doc)
)
;; 创建表格: (vla-addtable 空间 插入点 行数 列数 行高 列宽)
(setq tblObj (vla-addtable mSpace (vlax-3d-point pt) rowCnt 2 rowHeight colWidth1))
;; 设置第二列宽度
(vla-SetColumnWidth tblObj 1 colWidth2)
;; 设置表头样式 (加粗、居中)
(vla-SetTextHeight tblObj 1 5.0) ; 表头文字高度
(vla-SetTextHeight tblObj 2 4.0) ; 数据行文字高度
(vla-SetText tblObj 0 0 "文字内容")
(vla-SetText tblObj 0 1 "数量")
;; 填充数据行
(setq i 0) ; 数据行索引从1开始 (0是表头)
(foreach item lst
(setq content (car item)
count (cdr item)
rowIdx (1+ i)
)
(vla-SetText tblObj rowIdx 0 content)
(vla-SetText tblObj rowIdx 1 (itoa count))
(setq i (1+ i))
)
(vla-Update tblObj)
(princ "\n✅ 统计表格已生成。")
(princ)
)
(princ "\n文字统计表格程序已加载,请输入 TCT 运行。")
(princ)
加载与运行
- 保存文件:将上述代码保存为
TextCountTable.lsp。 - 加载程序:在CAD命令行输入
AP(或APPLOAD),找到并加载该文件。 - 执行命令:输入
TCT并按回车。 - 操作提示:
- 框选需要统计的文字对象(也可直接按回车选择全部对象)。
- 在图纸中点击一个位置作为表格左上角插入点。
- 结果:CAD自动生成一个表格,列出每种文字内容及其数量,按内容升序排列。
表格效果示例
| 文字内容 | 数量 |
|---|---|
| 卧室 | 12 |
| 客厅 | 8 |
| 卫生间 | 6 |
| 厨房 | 5 |
| ... | ... |
参数自定义
- 列宽调整:修改代码中的
colWidth1(内容列)和colWidth2(数量列),例如30.0和15.0。 - 行高调整:修改
rowHeight。 - 排序方式:若想按数量降序排列,将排序语句替换为:
(setq lst (vl-sort lst '(lambda (a b) (> (cdr a) (cdr b))))) - 全图自动统计(无需手动选择):将选择语句改为:
(setq ss (ssget "_X" '((0 . "*TEXT"))))
四、两种方案的选择建议
| 需求场景 | 推荐方案 |
|---|---|
| 一次性统计,希望导出数据到Excel做进一步分析 | 数据提取 + Excel |
| 经常需要统计文字数量,且希望结果以表格形式保留在图纸中 | LISP插件(TCT命令) |
| 图纸中包含大量块内文字或属性文字 | 数据提取法更灵活(可勾选多种对象类型) |
| 追求最快操作、无需安装任何外部文件 | 数据提取法(原生功能) |
五、总结
- 当文字种类达到16种以上时,避免使用重复的“快速选择”或手动计数。
- AutoCAD自带的数据提取功能可以一次性将所有文字内容导出到Excel,配合透视表快速分类统计。
- 若希望在图纸内部直接生成统计表格,加载提供的LISP程序,输入
TCT命令,即可一键完成统计与制表。 - 两种方法均无需额外付费插件,适用于AutoCAD 2010及以上版本。
通过上述方法,设计师可以轻松应对大量文字标注的统计工作,提升图纸信息管理的效率。
评论功能已关闭