当大模型接入CAD、文档和Excel:一个工程师的AI实战手册

7 阅读10分钟

一、ChatGPT很好,但它碰不到你的图纸

AI办公的话题火了整整一年。Copilot进了Office,WorkBuddy接管了桌面,Kimi Work能调度300个Agent并行干活——看起来人人都在拥抱AI智能体。

但我发现一个奇怪的现象:大部分人还在把AI当搜索引擎用。

"帮我总结这篇文章""帮我查一下这个概念""帮我写一封邮件"——一问一答,复制粘贴。AI在浏览器里,工作在软件里,中间隔着一个人肉搬运工。

这中间缺的是什么?

AI和你的工程工具之间,少了一座桥。

你今天打开AutoCAD画图、打开Excel算量、打开Word写报告,这些工具都支持COM接口——也就是说,一行Python脚本就能让程序操控它们。而LLM能做的是:把你说的"人话",翻译成程序能执行的代码。

桥,就搭在这里。

不用Agent,不用WorkBuddy,不用Copilot。今天我把我接通的三个方向——CAD、Excel、Word——整个工作流拆给你看。


✦ AI真正的战场不在聊天框里在你每天打开的工具软件里


壹 · CAD:说一句话,画一张图

为什么要让LLM画CAD?

AutoCAD的图形界面很好用——但你有没有经历过这种场景:临时要画一个标准横断面、批量加50个标注、或者按坐标表逐个放点。每一个都要鼠标点半天,错一个就得重来。

我写了一个工具叫 TextToCAD。它的逻辑很简单:

你说人话 → DeepSeek理解意图 → 生成Python代码 → COM驱动AutoCAD执行

打开一个PySide6小窗口,输入一句中文:「在这个图层画一条从(0,0)到(100,50)的线,再画一个半径30的圆」,点执行——线画好了,圆也画好了。

关键设计:Safe Helper Functions

直接让LLM生成COM代码是找死。COM接口又臭又长——ModelSpace.AddLine(start, end)obj.Colorobj.Layer——LLM很容易生成不存在的API调用。

我的解法是:在exec命名空间注入一层安全辅助函数。

# 不说 "AutoCAD COM API"
# LLM 只需要用这些函数:
L(0, 0, 100, 50)      # 画线:起点→终点
C(50, 25, 30)          # 画圆:圆心+半径
R(10, 10, 80, 40)     # 画矩形:左上角+宽高
T("标注文字", 20, 30, 5)  # 写文字:内容+坐标+高度
DIM(0, 0, 100, 0, 5)  # 标注:两点+偏移距离
OBJS()                 # 列出所有对象
UNDO()                 # 撤销

这一层的效果是惊人的——LLM只需要组合这些简单的函数名,不需要知道底层是win32com.client.Dispatch("AutoCAD.Application")还是pyautocad

它不需要懂COM,它只需要懂你。

两种模式,两个按钮

工具设计了双模式:

模式做什么LLM的权限
分析查询"统计图层上的对象数量""找出所有块定义"只读,不能改图
执行绘制"画一个标准基础平面图""把选中的对象移到图层3"可写,带UNDO保护

这两种模式分开,保证了"先看后动"的安全节奏。点错了大不了UNDO回滚——比手动点错的代价小多了。

不只是AutoCAD

同一个架构覆盖了五个工具:

工具核心能力辅助函数示例
AutoCAD自然语言绘图L() C() R() T() DIM()
FreeCAD参数化建模BOX() CYL() FUSE() CUT()
Excel数据读写修复V() F() ERR() FIX() LOOP()
Word文档编辑排版WRITE() HEADING() TABLE() FIND()
PPT幻灯片生成NEW_SLIDE() TB() TABLE_SLIDE()

五个工具,同一个模式:LLM翻译意图 → 安全函数执行 → 人验收结果。


✦ 最好的自动化不是最聪明的是最不容易出错的


贰 · Excel:让AI修数据,不是让它看数据

一个真实的场景

做工程审计的时候,Excel文件里藏着各种问题:公式引用了死值、单元格值是#DIV/0!、隐藏行里有数据。一个项目几百行数据,人工逐行核对——两天起步,还容易漏。

LLM能做什么?你让它"分析这个Excel",它只能看。但你让它操控Excel的COM接口,它就能修。

核心架构:COM不是魔鬼,是杠杆

import pythoncom
pythoncom.CoInitialize()
import win32com.client

excel = win32com.client.Dispatch('Excel.Application')
excel.Visible = False          # 后台运行,不弹窗
excel.DisplayAlerts = False    # 不弹确认框
excel.ScreenUpdating = False   # 关闭刷新,提速

wb = excel.Workbooks.Open('原始审计表.xlsx')
ws = wb.Worksheets(1)

# LLM生成的修复代码 ↓
ws.Cells(5, 42).Value = 12345.67           # 修正数据
ws.Cells(5, 42).Interior.Color = 0xFFFFCC  # 浅黄高亮
cell = ws.Cells(5, 42)
cell.AddComment('修复说明\n原值: 12000.00\n修正为: 12345.67\n原因: 公式引用偏移')
cell.Comment.Shape.TextFrame.AutoSize = True  # 批注自动尺寸

同样的Safe Helper模式:

V(cell)       # 取值:V("A5") → 单元格的值
F(cell)       # 取公式:F("B3") → "=SUM(A1:A10)"
ERR(cell)     # 检测错误:#DIV/0! → True
FIX(cell, f)  # 修复公式:FIX("B3", "=SUM(A1:A9)")
LOOP(ws, col, start, end)  # 批量遍历

LLM生成的是对V() F() FIX()的调用,不是裸COM。每次执行都在安全边界内。

整个自动化流水线

① 读数据(UsedRange.Value + UsedRange.Formula,2次COM调用)
    ↓
② 送到LLM分析("找出以下数据中的:公式引用偏移、除零错误、隐藏行数据")
    ↓
③ LLM返回修复方案(每行:位置→原值→修正值→原因)
    ↓
④ COM执行修复(改值+加批注+黄高亮)
    ↓
⑤ 新建"修复记录"Sheet置顶(深蓝标题+白字表头,所有修改一目了然)
    ↓
⑥ SaveAs保存(不用Save(),会静默失败)

一个256行的审计表,人工核对要两天,这套流水线跑完:8分钟。

两个血泪教训

教训一:Save() 会静默失败。

# ❌ 不会报错,文件也没变
wb.Save()

# ✅ 正确姿势
wb.SaveAs(path, FileFormat=51)   # 51 = xlOpenXMLWorkbook
wb.Close(SaveChanges=False)       # 已SaveAs,不重复保存

COM的Save()在某些情况下(网络路径、只读来源、权限受限)不抛异常直接跳过。你点完"保存"以为搞定了,第二天打开还是原样。这个坑我踩了两次才找到规律。

教训二:列号必须实物验证。

pandas读出来的列号和COM接口的列号可能差一位。我之前写了个批量修复脚本,列41是"坡改梯"列,但COM里实际在col42——结果读到相邻列的相同值,判断"无差异",漏了535条问题。

每次跑之前,先读表头行确认列号:

for c in range(38, 46):
    print(f'col{c}: {ws.Cells(1, c).Value}')

✦ 一行粗糙的代码胜过一万篇收藏的教程COM不是上个世纪的遗物,是你撬动自动化的支点


叁 · Word:AI写文档是编程,不是粘贴

python-docx的三种高级操作

LLM输出一段文字让你粘贴到Word里——那是AI聊天的水平。真正让LLM操控Word文档生成,靠的是python-docx库。

有三个操作在工程文档里极其常用,但网上教程几乎不讲清楚:

一、表格不跨页断开

工程报告里的表格经常很长——6行、8行、12行。默认情况下Word会在页边界把表格劈成两半,标题在上一页底,数据在下一页顶,看起来像排版事故。

from docx.oxml import OxmlElement
from docx.oxml.ns import qn

for row in table.rows:
    # 核心:设置行属性 cantSplit = true
    trPr = row._tr.get_or_add_trPr()
    cantSplit = OxmlElement('w:cantSplit')
    cantSplit.set(qn('w:val'), 'true')
    trPr.append(cantSplit)

# 双保险:单元格段落加 keepLines
for cell in row.cells:
    pPr = cell.paragraphs[0]._p.get_or_add_pPr()
    keepLines = OxmlElement('w:keepLines')
    pPr.append(keepLines)

两行XML就解决了一个排版噩梦。cantSplit告诉Word"这行不许断",keepLines给段落加双保险。

二、自动生成目录(TOC)

工程报告的目录页是最后一个做的,但永远第一个被翻。手动写目录——页码一改全部重排。python-docx可以直接插入Word的TOC域代码:

p = doc.add_paragraph()
run = p.add_run()

# 域开始
fldChar_begin = OxmlElement('w:fldChar')
fldChar_begin.set(qn('w:fldCharType'), 'begin')
run._r.append(fldChar_begin)

# 域指令:1-3级标题,超链接,隐藏Tab
run2 = p.add_run()
instrText = OxmlElement('w:instrText')
instrText.set(qn('xml:space'), 'preserve')
instrText.text = ' TOC \\o "1-3" \\h \\z \\u '
run2._r.append(instrText)

# 域结束
run3 = p.add_run()
fldChar_end = OxmlElement('w:fldChar')
fldChar_end.set(qn('w:fldCharType'), 'end')
run3._r.append(fldChar_end)

生成的docx打开后,右键目录 → 更新域 → 目录和页码自动生成。前提是你章节标题用了Heading 1/2/3样式。

三、中文字体正确设置

run.font.name = '宋体'
# 关键:东亚字体回退——下面这行不写,中文会掉成默认字体
run._element.rPr.rFonts.set(qn('w:eastAsia'), '宋体')

font.name只管西文字符。中文字符走的是w:eastAsia属性——少写这一行,整篇文档的中文全变成等线。


✦ AI写文档最值钱的不是输出快是排版不出错


肆 · 核心模式:Safe Helper Functions

为什么这个模式管用?

回顾三个工具的架构,你会发现它们共享同一个核心模式:

人说话 → LLM翻译意图 → 安全函数层 → 工具COM接口 → 执行结果
                          ↑
                    这里是关键

安全函数层做了什么:

  1. 屏蔽底层复杂度 — LLM不需要知道COM怎么初始化、怎么释放、怎么处理HRESULT错误码。它只需要调L() V() WRITE()
  2. 限制破坏半径 — 函数层是白名单模式。不能做的操作(删文件、改系统设置)根本不存在于命名空间里。
  3. 提供UNDO出口 — 每个工具都内置UNDO/MOVE/DEL等修正手段。LLM可以犯错,但你可以一秒回滚。
  4. 批量操作优化UsedRange.Value一次读出全部数据(2次COM调),而不是逐单元格循环(1000+次调用)。LLM不需要懂性能优化,因为它调的是已经优化好的函数。

这套模式的适用范围

不只是CAD/Excel/Word。任何有自动化接口的软件都适用:

软件接口可以做什么
AutoCADCOM / .NET图纸自动生成、批量修改
ExcelCOM (win32com)数据清洗、审计修复、报表
Wordpython-docx / COM文档生成、格式统一、目录
PPTCOM (win32com)幻灯片批量生成
FreeCADPython API参数化3D建模
PhotoshopCOM / JSX批量图片处理
SAP2000OAPI结构计算自动化
ArcGISArcPyGIS数据处理

任何一个你每天手动操作超过10分钟的软件,都值得搭一座LLM的桥。


✦ 不用追Agent的风口LLM + 一行Python = 你的第一步自动化


五、收尾:从"收藏教程"到"写一行脚本"

现在市面上的AI办公产品越来越复杂——WorkBuddy、Copilot Cowork、Kimi Work,每个都在讲"Agent集群""自主执行""全流程自动化"。这些东西很好,但有一个问题:

它们让你觉得自动化是别人替你做的事。

而真相是,最好的自动化是你自己写的

  • 你自己最清楚哪一步最重复、最耗时间
  • 你自己最清楚数据长什么样、坑在哪里
  • 你自己最清楚输出的格式、交付的标准

不需要等公司采购Agent平台,不需要追最新的AI风口。你只需要做一件事:

把LLM接到你每天用的工具上。

一行Python脚本,五个safe helper函数,一次COM调用。听起来小,但这是从"AI帮我查资料"到"AI替我干活"的质变。

CAD里画一条线。Excel里修一个数。Word里排一页纸。

工程师的浪漫,从来不是买最贵的工具,而是用最小的代码,撬动最大的杠杆。


代码很轻 杠杆很长


✦ 美好需要创造 世界一隅 · AI时代的深度思考者 2026年6月21日 TextToCAD 项目 · claude-memory


📌 本文首发于「世界一隅」

如果你也想在算法洪流中守护清醒的微光, 加我微信 zhaotianbing,送你一份《深度阅读者的AI工具包》

《照见幸福》《思想需要被说出来》系列持续更新 ✦