论文的一张流程图改到第三版时,人的心态会发生什么变化?我见过不少同学把 Visio 打开一次,拖几个框、连几条线,然后关掉,再也不愿意打开第二次。因为每次调整节点位置、对齐箭头、修改文字,都要跟图里的形状“搏斗”。这也是为什么“用代码画图”一直有市场,从 Graphviz 到 PlantUML,再到 Mermaid,本质上都是把绘图变成可维护的文本。
但问题来了:这些工具生成的图往往“不够科研”,没有 Visio 那种精细的手感,也无法在论文里直接当矢量素材用。于是很多人退回到 Visio 手动拖拽,一边画一边安慰自己“这是最后一次”。
Codex 出现之后,这件事开始有了一点变化。如果你把它当作一个能写代码的助手,而不是一个聊天机器人,你就能让它帮你生成 VBA 宏、Graphviz 脚本甚至直接驱动 Visio 的 Python 代码。也就是说,画图这件事,可以从“人工拖拽”变成“描述需求 → Codex 生成脚本 → Visio 自动出图”。
这篇文章会从一个实际需求出发,给你三条可落地的自动化路径。每条路径都包含可以复制运行的代码示例,以及我在整理这些思路时认为真正值得注意的坑。读完之后,你至少能跑通一条,然后决定以后画图是用鼠标还是用 Prompt。
1. 这篇文章真正要解决的问题
先定位一下受众。如果你符合任意一条,这篇文章对你大概率有用:
- 你在写论文或项目文档,需要画流程图、架构图、实验流程图,但每次修改都很痛苦。
- 你已经用 Graphviz 或 Mermaid 画过图,但导师或编辑要求你提供 Visio 版本,或者需要用 Visio 继续调整细节。
- 你想试试 Codex,但不知道除了生成代码之外,它还能在日常办公绘图里帮你做什么。
Visio 的问题从来不是功能不够,而是操作效率太低。一个三节点的简单流程,手动拖拽加对齐大概需要两三分钟;如果节点有十几个,加上判断分支、跨层连接线,半小时能画完已经算顺利。更麻烦的是后续修改:你挪了一个框,所有连接线都跟着乱掉;你改了文字,原来的对齐又歪了。
用 Codex 生成的脚本绘图,核心思路是把“图”变成“数据”。你在 Prompt 里描述清楚节点和连接关系,Codex 生成一段代码,这段代码负责在 Visio 里创建形状、连接线并设置样式。之后想修改,只需要改代码里的节点列表,再重新运行一次。
不过这里要给出一个明确判断:Codex 不会替你一键完成所有事,真正的价值在于它替你承担了最繁琐的“坐标计算”和“对象调用”。你能不能画出好图,取决于你能不能把需求描述清楚,以及你愿不愿意在脚本生成后做一点点微调。这不叫“躺平”,这叫“把重复劳动交给程序,把审美留给自己”。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. Codex 自动画 Visio 的三种可行路径
在我整理过的方案里,最靠谱的不是某一种“特别智能”的方法,而是三个路线各有适用场景。下面先做一个总览,后面每一章展开实操。
| 方案 | 原理 | 优点 | 缺点 | 适合场景 |
|---|---|---|---|---|
| 路径一:VBA 宏 | Codex 生成 VBA 代码,在 Visio 中运行宏自动绘图 | 不依赖外部工具,所见即所得 | 需要开启开发工具选项卡,宏功能需授权 | 单机使用,需要后续在 Visio 中精细调整 |
| 路径二:Graphviz → SVG | Codex 生成 DOT 文本,Graphviz 渲染成 SVG,再导入 Visio | 代码简单,节点布局自动完成,容易批量生成 | SVG 导入后部分文本或样式可能丢失 | 流程复杂、节点多的图,适合先自动布局再手动微调 |
| 路径三:Python COM | Codex 生成 Python 脚本,通过 COM 接口直接驱动 Visio | 自动化程度最高,可集成到数据处理流程 | 需要 Windows + Visio + pywin32,环境要求高 | 需要批量生成多张图,或图表数据来自程序计算 |
三条路径并不是互斥的。我见过有人先用 Graphviz 快速生成一张布局合理的初稿,导入 Visio 后再用 VBA 宏统一调整样式。你完全可以根据自己的需求组合。
但有一点要提前说明:Codex 本身不直接和 Visio 交互。它不知道 Visio 内部是怎么管理形状的,它只知道通用编程语言和对象模型的常见用法。所以真正的技术关键,是你把“绘制流程”这件事翻译成代码的能力。好在 VBA、DOT、COM 这三种方式都属于成熟技术,网上资料很多,Codex 生成出来的代码通常足够作为起点。
3. 环境准备:安装 Codex 与绘图工具链
在写具体示例之前,先把环境理清楚。如果你只跑路径一,只需要 Codex 和 Visio;如果跑路径二,还需要 Graphviz;如果跑路径三,需要 Python 和 pywin32。
3.1 Codex 的安装与基本使用
Codex 目前有桌面版和 CLI 两种常见形态。更稳妥的方式是参考 OpenAI 官方文档安装。如果你习惯命令行,可以尝试:
bash复制npm install -g @openai/codex
codex
如果你使用桌面版,安装后需要登录自己的账号,并在系统设置里完成功能开关的配置。不同版本的安装细节可能会变,但核心流程都是:安装 → 登录 → 选择一个工作目录 → 在对话框里描述任务。
这里有一个容易踩的坑:Codex 默认会把生成的文件写入当前工作目录,也可能修改你指定的文件。第一次使用建议在一个空的测试目录里跑,避免它直接改动你的项目源码。尤其是让它“生成一个脚本”,不要让它“直接修改一个已有脚本”,否则你可能需要花更多时间检查改动。
3.2 Visio 的安装与开发工具准备
Visio 不是 Office 默认组件,需要单独购买或由组织提供授权。本文示例对版本要求不苛刻,但建议使用 2016 及以上版本,VBA 和 SVG 导入的功能才比较完整。
安装完成后,需要确认“开发工具”选项卡是否可见。路径是:
文件 → 选项 → 自定义功能区 → 勾选“开发工具”。
后续运行 VBA 宏时需要这个选项卡。
3.3 Graphviz 安装(可选)
如果走路径二,需要 Graphviz 把 DOT 文本渲染成 SVG。Windows 用户可以安装官方发布的 Windows 安装包,或者用包管理器:
bash复制choco install graphviz
安装后验证一下:
bash复制dot -V
能看到版本号就说明环境没问题。
3.4 Python 环境(可选)
路径三需要 Python 和 pywin32。一般用:
bash复制pip install pywin32
这里需要注意:pywin32 的 COM 调用只能在 Windows 上运行,而且需要本机安装了 Visio 才会注册对应组件。
4. 路径一实操:让 Codex 生成 VBA 宏,在 Visio 里一键出图
这条路径最贴近“传统 Visio 用户”的工作习惯。它的原理很简单:Codex 生成一段 VBA 宏,你在 Visio 里运行这个宏,宏会按代码中的指令创建页面、绘制矩形、添加文本并画连接线。
4.1 给 Codex 的 Prompt 示例
假设我要画一个最简单的深度学习实验流程:
用 VBA 编写一个宏,在 Visio 中创建一张新页面,绘制三个矩形框,依次为“数据预处理”“模型训练”“性能评估”。三个框之间用箭头连接,页面标题为“深度学习实验流程”。要求使用 Visio 的 Page.DrawRectangle 和 DrawLine 方法,矩形坐标可以选择任意合适的位置。
这里的关键是明确告诉 Codex:用 Visio 的方法、要生成宏、要创建新页面。如果描述含糊,Codex 可能生成一段控制 Excel 的 VBA,那就串台了。
4.2 生成的 VBA 宏示例
Codex 可能给出类似下面的代码:
vba复制Public Sub CreateFlowChart()
Dim vsoPage As Visio.Page
Dim vsoShape1 As Visio.Shape
Dim vsoShape2 As Visio.Shape
Dim vsoShape3 As Visio.Shape
Set vsoPage = ActiveDocument.Pages.Add()
' 设置页面标题
vsoPage.Background = False
Set vsoShape1 = vsoPage.DrawRectangle(1, 7, 3.5, 6)
vsoShape1.Text = "数据预处理"
Set vsoShape2 = vsoPage.DrawRectangle(5, 7, 7.5, 6)
vsoShape2.Text = "模型训练"
Set vsoShape3 = vsoPage.DrawRectangle(9, 7, 11.5, 6)
vsoShape3.Text = "性能评估"
' 绘制连线(箭头形状在后期手动添加)
vsoPage.DrawLine 3.5, 6.5, 5, 6.5
vsoPage.DrawLine 7.5, 6.5, 9, 6.5
End Sub
这段代码的核心逻辑不复杂:
ActiveDocument.Pages.Add()创建一个新页面。DrawRectangle(左, 下, 右, 上)用坐标绘制矩形,坐标系原点在页面左下角,单位是英寸。Text属性给形状添加文字。DrawLine画出连接线。
这里要提醒一个细节:DrawRectangle 和 DrawLine 生成的是基础矩形,不是 Visio 模板中的“流程图形状”。如果你需要带箭头的连接线或特定样式的框,最好在 Prompt 里明确要求用 Visio 的形状库,或者让 Codex 生成用 Shape.Drop 方法放置主控形状的代码。基础方法的优势是简单,劣势是样式不够“Visio 原生”。
4.3 在 Visio 中运行宏
把上面的代码粘贴到 Visio 的 VBA 编辑器中:
- 打开 Visio,进入“开发工具”选项卡。
- 点击“Visual Basic”打开宏编辑器。
- 在“插入”菜单中选择“模块”,将代码粘贴进去。
- 回到 Visio,在“开发工具”选项卡中点击“宏”,选择
CreateFlowChart,运行。
如果一切正常,你会看到 Visio 自动新建了一页,并出现了三个矩形框和两条连接线。此时你可以手动补充箭头,调整位置,保存为你的论文插图。
这段流程看起来简单,但实际用好它并不容易。真正的坑在于:如果你期望一次生成一张完整、美观、可直接投稿的图,Codex 还需要感知你的视觉偏好。我的建议是,先跑通这个最小示例,然后再逐步往 Prompt 里添加样式要求,比如“矩形填充色为浅蓝色”“连接线为带箭头的实线”“文字居中加粗”。
5. 路径二实操:DOT 代码画图,再导入 Visio 进行二次编辑
如果你对 Visio 里的 VBA 不熟,或者你的图表节点很多,我更推荐路径二。原因很简单:让程序自动布局,比人工指定坐标可靠得多。
Graphviz 会根据你提供的节点关系自动计算位置。Codex 生成 DOT 代码,然后本地渲染成 SVG,Visio 可以打开 SVG 文件并转换为可编辑的形状。这种方式对科研流程图特别友好,因为你不必担心节点重叠或连接线交叉。
5.1 给 Codex 的 Prompt 示例
用 Graphviz DOT 语言画一个横向的流程图,节点依次为“数据采集”“数据清洗”“特征提取”“模型训练”“模型评估”,其中“数据清洗”后有一个判断框“是否有缺失值”,如果是则回到“数据采集”,否则进入“特征提取”。使用形状 rectangle 表示普通步骤,diamond 表示判断。
5.2 生成的 DOT 代码示例
DOT 代码通常很容易阅读:
dot复制digraph G {
rankdir=LR;
node [fontname="Microsoft YaHei", fontsize=12];
graph [dpi=300];
A [label="数据采集", shape=box];
B [label="数据清洗", shape=box];
C [label="是否有缺失值", shape=diamond];
D [label="特征提取", shape=box];
E [label="模型训练", shape=box];
F [label="模型评估", shape=box];
A -> B;
B -> C;
C -> A [label="是"];
C -> D [label="否"];
D -> E;
E -> F;
}
这段代码定义了 6 个节点和 5 条边。rankdir=LR 让整套图横向排列;shape 控制节点形状;label 控制显示文字。这种文本形式的好处是,你可以像写代码一样维护图,加一个节点就是加一行文本。
5.3 用 Graphviz 渲染成 SVG
把以上内容保存为 flow.dot,然后在命令行执行:
bash复制dot -Tsvg flow.dot -o flow.svg
执行成功后,当前目录会出现 flow.svg。用浏览器打开可以预览,如果布局满意,就进入下一步。
5.4 导入 Visio
打开 Visio,点击“文件 → 打开”,文件类型选择“所有文件”,选择刚才生成的 flow.svg,Visio 会尝试将 SVG 转换为可编辑的 Visio 形状。如果转换顺利,你会看到一个由矢量形状组成的图,每个节点和箭头都能单独选中和修改。
导入之后有几个常见问题:
- 中文字体可能变成默认字体,需要重新设置字体样式。
- 线条粗细和颜色可能失真,通常是因为 SVG 中使用了非 Visio 标准样式。
- 判断框的文本位置可能需要微调。
不管怎样,导入后的图至少省掉了一步步拖拽绘制的时间。你只需要做最后的美化,比如把字体调成宋体或 Times New Roman,把线条加粗,给节点填充论文要求的颜色。
5.5 这条路线的关键判断
路径二的核心价值是“布局自动化”。如果你画过包含 20 个以上节点的流程图,就一定体验过手动布线有多痛苦。Graphviz 本身的布局算法虽然不是最优,但足以作为初稿;导入 Visio 后再用手动方式修正个别连线,效率远高于从零开始画。
不过要注意,SVG 并不是 Visio 的原生格式。转换过程中很有可能丢失一些元信息,比如形状类型、连接关系。如果你需要一份带完整拓扑关系的 Visio 文件,后续还要重新连接一些线条。这个代价通常可以接受。
6. 路径三进阶:通过 Python COM 接口,让 Codex 直接驱动 Visio 对象模型
如果你对自动化的需求不止于“画一张图”,而是需要批量生成几十张图,或者需要把数据文件直接映射成流程图,那路径三是更好的选择。Windows 下可以用 Python 通过 COM 接口控制 Visio,就像用 Excel 宏控制 Excel 一样。
先说清楚:这条路径需要本机安装 Windows 版 Visio,并且代码只能在 Windows 上运行。如果你用的是 Mac 或 Visio 网页版,可以跳过这一节。
6.1 给 Codex 的 Prompt 示例
使用 Python 的 win32com.client 控制 Visio 应用。创建一个新文档,在新页面中添加两个矩形,分别写“输入数据”和“输出结果”,并用一条折线连接两者。最后保存文档为 result.vsdx,然后关闭 Visio。
6.2 生成的 Python 脚本示例
以下是基于常见 COM 调用逻辑的一种写法:
python复制import win32com.client
# 启动 Visio 应用
visio = win32com.client.Dispatch("Visio.Application")
visio.Visible = 1
# 创建新文档
doc = visio.Documents.Add("")
page = doc.Pages.Add()
# 绘制两个矩形(坐标:左, 下, 右, 上)
shape1 = page.DrawRectangle(1, 5, 3, 4)
shape1.Text = "输入数据"
shape2 = page.DrawRectangle(5, 5, 7, 4)
shape2.Text = "输出结果"
# 连接线
page.DrawLine(3, 4.5, 5, 4.5)
# 保存文档
doc.SaveAs("result.vsdx")
visio.Quit()
这段代码做的事情和路径一几乎一样,只是语言换成了 Python。运行它的前提是已经安装 pywin32,并且系统中有 Visio 的 COM 组件。
6.3 运行与验证
在命令行执行:
bash复制python create_visio.py
如果一切正常,你会看到 Visio 窗口弹出,自动完成绘图,然后保存并关闭。此时你可以打开 result.vsdx 检查结果。
这段脚本只是一个非常基础的起点。如果你认真看的话,会发现它依然使用了固定坐标,并没有实现智能布局。在真实项目中,你可以让 Codex 把节点列表、连接关系、坐标映射都放到一个数据文件里,再用代码循环创建所有形状。这样,画图就完全变成了一项数据处理任务。
6.4 这条路线的风险控制
COM 操作比 VBA 更脆弱,主要风险包括:
- Visio 未正确安装或 COM 组件未注册,
Dispatch("Visio.Application")会直接报错。 - 脚本运行过程中如果 Visio 弹出对话框,程序可能卡住。
- 创建的新文档没有保存路径时,
SaveAs可能要求指定绝对路径。
建议在开发时先让 visio.Visible = 1,这样可以人工看到每一步;等脚本稳定后,再改成隐藏模式运行。另外,任何涉及自动输出的脚本,第一次都要在测试环境中运行,确认不会覆盖已有数据。
7. 设计好的 Prompt,是 Codex 画图的真正分水岭
我在看别人的 Codex 使用经验时,发现一个规律:画得不好的人,往往不是代码能力差,而是 Prompt 太笼统。你如果只说“给我画个流程图”,Codex 只能给出一个最普通的答案;你如果告诉它节点有哪些、属于什么类型、连接方向如何、视觉风格是什么,它才能生成可用的代码。
给 Codex 描述绘图任务时,我建议按下面这个模板写:
- 语言与目标:用 VBA / Python / DOT,实现什么功能。
- 绘图对象:有哪些框、哪些线、哪些分组。
- 布局偏好:横向还是纵向,节点是否分层,判断节点用什么形状。
- 样式要求:填充色、边框颜色、字体、箭头。
- 输出方式:在 Visio 中新建页面、保存为文件,还是返回代码。
举个例子:
用 VBA 在 Visio 中绘制一个算法流程图。纵向布局,包括开始、初始化参数、循环判断、计算输出、结束五个节点。开始是圆角矩形,判断是菱形,其余是矩形。所有节点文字居中,填充色为淡蓝色,边框为黑色。连接线上带箭头。运行后自动适应页面大小。
加上这些限制后,Codex 生成的代码会专业得多。如果第一次结果不满意,不要急着骂它,试着追加“请把判断节点的出口标签写上‘是’和‘否’”“请把矩形的宽度设为 2 英寸、高度设为 1 英寸”这类具体指令。
如果你需要插入公式,要清醒一点:Visio 本身不支持原生 LaTeX 公式。常规做法是在 Visio 里用 OLE 嵌入 MathType 或插入公式图片。Codex 能做的,是帮你生成一个包含公式图片路径的绘图脚本,但它改变不了 Visio 的底层能力。
8. 常见问题与排查思路
| 问题现象 | 可能原因 | 排查方式 | 解决方案 |
|---|---|---|---|
| Codex 启动后无法加载组织设置 | 本地配置文件缺失或组织授权未同步 | 检查当前账号的组织绑定,查看官方日志 | 退出重新登录,或在配置文件里检查设置项 |
| Codex 生成了代码但拒绝写入文件 | 工作目录权限不足,或安全限制 | 确认 Codex 的工作目录是否为当前项目 | 换到有空权限的目录,或手动复制代码到目标文件 |
| VBA 宏无法运行 | 开发工具未开启,或宏被禁用 | 查看 Visio 选项中的“信任中心”设置 | 启用宏功能,仅对可信来源运行代码 |
| DrawRectangle 绘制的位置不对 | 坐标系理解错误 | 查看 Visio 默认页面坐标范围 | 用绝对值坐标测试,或在代码中打印坐标边界 |
| DOT 渲染出的 SVG 导入 Visio 后文字丢失 | SVG 字体映射问题 | 用浏览器打开 SVG 检查原始文本 | 在 DOT 中改用系统常见字体,如宋体或 Arial |
| win32com Dispatch 失败 | Visio COM 组件未注册 | 确认 Visio 已安装且版本支持 COM | 重新安装 Visio,或使用 Office 安装修复工具 |
| Codex 报“模型不支持” | 当前选择的模型与 Codex 功能不匹配 | 查看 Codex 配置中的模型设置 | 切换为官方支持的模型版本 |
| 生成的图节点重叠 | 布局约束不足 | 检查代码中是否使用了自动布局功能 | 在 Prompt 里要求使用 Graphviz 或 Visio 的布局算法 |
这些排查思路不一定覆盖所有环境差异,但方向是对的:多数问题要么出在权限与设置,要么出在坐标与布局,要么出在模型配置。先看错误日志,再做小范围修改,不要一遍遍重新生成,那样反而更慢。
9. 最佳实践与工程建议
如果你打算把“Codex 画 Visio”用到真正的科研或工作中,有几个习惯值得提前养成。
9.1 把绘图脚本纳入版本管理
画图脚本和论文代码一样,应该放进 Git 仓库。这样你可以追踪每一次画图规则的修改,也可以在多台电脑间同步。DOT、VBA、Python 都是纯文本,非常适合版本管理。手动拖出的 Visio 图则是二进制文件,比较难以比较差异。改用脚本后,你可以清楚地看到“这次改了哪个节点、哪条边”。
9.2 区分“初稿自动化”和“终稿手工化”
我不建议追求全流程无人干预。更现实的做法是:用 Codex 加脚本生成初稿,解决“从无到有”的问题;然后在 Visio 中手工进行终稿调整,解决“从有到优”的问题。这样既利用了自动化的效率,又保留了 Visio 的精细编辑能力。
9.3 制定统一的样式规范
如果你所在课题组或团队有统一的绘图规范,不要把它们只记在脑子里。把规范写成一个“样式清单”,放入 Prompt 中,或者直接沉淀在脚本变量里。例如:
python复制NODE_STYLE = {
"fill": "#DCE6F1",
"line": "#000000",
"font": "Microsoft YaHei",
"fontsize": 12,
}
后续再画图,只要复用这套样式表,就能保证整个论文或汇报材料里的图风格一致。
9.4 注意安全与授权边界
VBA 宏是可以执行任意代码的,不要运行来路不明的宏。即便你自己生成,也要理解每行代码的作用后再运行。使用 COM 脚本时,建议不要以管理员权限运行,除非你需要访问受保护的系统资源。涉及保存文档路径时,避免使用临时目录,防止重要数据意外被覆盖。
9.5 批量场景下,先写数据清单
如果需要生成 10 张结构类似但内容不同的流程图,不要逐张写 Prompt。正确做法是:先把每张图的节点和连接关系整理成表格或 JSON,然后让 Codex 生成一个读取数据清单并批量绘图的脚本。这样后续增删图表,只需要改数据文件,完全不需要改动绘图逻辑。
10. 总结与后续学习方向
回到最初的问题:Codex 真的能让你“全自动画 Visio”吗?
可以,但不是靠魔法。它靠的是把绘图流程拆解成可执行的脚本,而这一步恰好是 Codex 最擅长的。你给它一个清晰的指令,它给你一套 VBA、DOT 或 Python 脚本;你在本地运行,Visio 就会按规则生成图形。这种方式尤其适合需要反复修改的科研流程图,因为你不再依赖鼠标拖拽记忆,而是依赖文本描述和代码逻辑。
我对不同读者给出的判断是:
- 如果你只在单机上画少量图,优先学路径一,VBA 宏最直接。
- 如果你需要画节点多、关系复杂的大图,优先学路径二,Graphviz 的自动布局能帮你省下大量时间。
- 如果你有批量绘图需求,或者希望图表随着数据动态更新,那就值得投入时间学习路径三。
下一步你可以试着做一个完整的实验:用 Codex 生成一张 20 个节点的架构图,分别用三种路径各跑一遍,看看哪种方式最符合你的工作流。你未必会全用,但这个过程会帮助你理解 Codex 真正擅长的是什么——它不只是聊天和写代码,它还可以成为你的“绘图脚本生成器”。
不要把终稿步骤彻底交给 AI,保持人最后的控制权,这既是效率策略,也符合科研严谨性的习惯。
