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

一、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命名空间注入一层安全辅助函数。

python 复制代码
# 不说 "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不是魔鬼,是杠杆

python 复制代码
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模式:

python 复制代码
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。每次执行都在安全边界内。

整个自动化流水线

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

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

两个血泪教训

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

python 复制代码
# ❌ 不会报错,文件也没变
wb.Save()

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

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

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

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

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

python 复制代码
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会在页边界把表格劈成两半,标题在上一页底,数据在下一页顶,看起来像排版事故。

python 复制代码
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域代码:

python 复制代码
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样式。

三、中文字体正确设置

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

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


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


肆 · 核心模式:Safe Helper Functions

为什么这个模式管用?

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

markdown 复制代码
人说话 → 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。任何有自动化接口的软件都适用:

软件 接口 可以做什么
AutoCAD COM / .NET 图纸自动生成、批量修改
Excel COM (win32com) 数据清洗、审计修复、报表
Word python-docx / COM 文档生成、格式统一、目录
PPT COM (win32com) 幻灯片批量生成
FreeCAD Python API 参数化3D建模
Photoshop COM / JSX 批量图片处理
SAP2000 OAPI 结构计算自动化
ArcGIS ArcPy GIS数据处理

任何一个你每天手动操作超过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工具包》

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