← 返回 Skill 列表
extension
分类: 数据与分析无需 API Key

CAD表格提取

当用户想要从CAD DWG/DXF图纸中提取表格并将其导出到Excel时,应使用此技能。触发短语包括:从CAD导出表格、CAD表格导出、把cad里的表格导成Excel、DXF表格提取、图纸表格转Excel、提取图中的表、从DXF/DWG中提取表格。它通过聚类实体坐标来重构由TEXT/MTEXT单元格和LINE边界构建的表格,恢复CAD特殊字符,并写入多页的.xlsx文件。

person作者: user_4c766b16hubcommunity

CAD 表格提取导出 Excel

Overview

从 CAD 图纸(DWG/DXF)中自动识别由文本 + 线条构成的表格,按坐标重建行列结构,还原特殊字符,导出为多 sheet 的 Excel 文件。核心是几何聚类,而非 OCR:靠竖线定位列、横线定位行、文本坐标归位单元格。

何时使用

  • 用户给出 .dxf / .dwg 文件,要求"导出里面的表格""把表转成 Excel""提取图上的表"。
  • 图纸中的表格是 CAD 原生表格(TEXT/MTEXT + LINE 边框),而非扫描图片。
  • 若表格是扫描/图片形式,本技能不适用,需走 OCR 路线。

环境与依赖

  • Python:C:\Users\ZJ\.workbuddy\binaries\python\envs\default\Scripts\python.exe(隔离 venv)。
  • 依赖 ezdxf、openpyxl,通常已装;缺则 pip install ezdxf openpyxl。
  • 若输入是 .dwg(非 ASCII 的 DXF),先用 cad-viewer 技能或 ODA/ezdxf 转成 .dxf 再处理。

工作流

1. 先跑自动提取

cd "C:\Users\ZJ\.workbuddy\skills\cad-table-extract"
"C:\Users\ZJ\.workbuddy\binaries\python\envs\default\Scripts\python.exe" \
  scripts/extract_tables.py "C:\path\to\drawing.dxf" "C:\path\to\output.xlsx"

脚本会自动:识别表格带(上下排列的多表)→ 按 x 大间隙分割(左右排列的多表)→ 推导行列边界 → 文本归位 → 生成多 sheet Excel。终端会打印每张表的行列数与提示。

2. 结果错位时用诊断工具定位

"C:\Users\ZJ\.workbuddy\binaries\python\envs\default\Scripts\python.exe" \
  scripts/dump_texts.py "C:\path\to\drawing.dxf" --lines

dump 全部文本的 x/y/字号/对齐 与全部 LINE 端点,据此判断每张表的真实列边界(竖线 x)与行边界(横线 y)。若自动推导仍不准,在脚本内按实际坐标硬编码 col_edges / 表带 x 范围(参照本技能此前处理"洁净手术室参数表"三个左右排列表的做法)。

3. 验证输出

用 openpyxl 读回 Excel,打印每个 sheet 的前几行,核对:表头多级结构、单位行、特殊符号、行/列归属。多级表头(如"夏季/冬季"分组、上下拼接的单位)通常需要手动合并单元格,在脚本里用 merge_cells 补。

已知坑(务必人工核对)

  1. ≤/≥ 错位:CAD 的 SHX 字体里 ≥ 与 ≤ 在字符表位置相邻,导出 DXF 后可能互相错位。导出后按业务逻辑判断,例如"最厚保温档对应最大管径"应为 ≥ 而非 ≤。必要时在脚本加后处理强制纠正。
  2. 特殊字符:%%D→°、%%C→∅、%%P→±、%%DC→℃、%%%→%、m2/m3→²/³。脚本已内置 fix(),若字体特殊可调整。
  3. MTEXT 多行:MTEXT 的 \P 换行与格式码需清理,脚本已处理,但复杂 MTEXT 表格建议先 dump 核对。
  4. 无框线表格:若表格只有文本没有 LINE 边框,几何聚类失效,需退化为按文本 y/x 聚类(cluster_ys 思路),参照 dump_texts.py 输出手工建边界。

脚本清单

  • scripts/extract_tables.py — 自动提取主脚本(通用,坐标聚类)。
  • scripts/dump_texts.py — 诊断工具,dump 文本坐标与线条端点。