一、这次薅到的是什么
之前的文章我写了 Colab CLI——让 AI 在终端白嫖远端算力。
这次发现的是另一个方向:
让 AI 自己把 Office 文档做出来。
场景你一定遇到过:
- 写自动出报告的脚本,
python-docx 用了 50 行,排版改一下又是 30 行 - 让 Claude / Cursor 帮你做 PPT,它们只能给文字大纲,排版还得你自己搞
- Excel 透视表用
openpyxl 做不出来,只能手动
我最近发现一个叫 OfficeCLI 的开源项目:
一句话就能让 AI Agent 创建、编辑、检查 Word / Excel / PPT 文档——不用装 Office,单文件,跨平台,免费。
最香的三个点:
- AI 原生设计——命令行操作、
--json 输出、路径寻址,专为减少 token 消耗设计 - 内置渲染引擎——文档渲染成 HTML / PNG,AI 能”看到”效果,形成闭环
- MCP 一行接入——
officecli mcp claude 就能让 Claude Code 直接操作 Office 文档
我最大的痛点是:让 AI 做文档,它只能给我文字,排版还得我自己搞。
现在 officecli add slides.pptx / --type slide --prop title="Q4 Report" 一行搞定——
AI 从”只会写字”变成”能出成品”。
⚠️ 版本说明:本文基于 OfficeCLI v1.0.129(GitHub: iOfficeAI/OfficeCLI,License: Apache-2.0)。单一二进制文件,无需安装 Microsoft Office 或 LibreOffice。支持 macOS / Linux / Windows 全平台(含 ARM64)。.NET 运行时嵌入二进制,运行时不需要额外装任何东西。
二、OfficeCLI 是什么
一句话:专为 AI Agent 设计的 Office 套件。
命令行读写 Word / Excel / PPT,不需要装 Office。
和你以前用的库有什么区别
| python-docx | |
|---|
| 各管各的(3 个库才能覆盖 Word+Excel+PPT) | 一个工具管三种 |
| | |
| | 一行命令 + JSON 输出,AI 直接用 |
| | 内置 HTML/PNG 渲染引擎,AI 能”看到”效果 |
| pip | 单文件下载,零依赖 |
| openpyxl | 一条命令创建原生 OOXML 透视表 |
| openpyxl | 350+ 内置函数自动求值 |
核心差异:
python-docx 是给 Python 开发者用的库;
OfficeCLI 是给 AI Agent 用的”眼睛 + 手”——
AI 不只会写字了,还能排版、渲染、检查、修 bug。
三层架构
OfficeCLI 设计了三层操作深度,按需选择:
| | | |
|---|
| L1 读取 | | view | |
| L2 DOM | | set | 结构化编辑,路径寻址 /slide[1]/shape[2] |
| L3 原始 XML | | raw | |
大多数场景 L2 就够了。L3 是给 OOXML 老手兜底的。
三、快速上手
3.1 安装
选一种你习惯的方式:
# macOS / Linux(一行脚本) curl -fsSL https://raw.githubusercontent.com/iOfficeAI/OfficeCLI/main/install.sh | bash # Windows PowerShell irm https://raw.githubusercontent.com/iOfficeAI/OfficeCLI/main/install.ps1 | iex # Homebrew brew install officecli # npm(自动获取对应平台二进制) npm install -g @officecli/officecli
装完跑 officecli --version,出 1.0.129 就对了。
⚠️ 注意:装完命令找不到?开一个新终端——PATH 可能没刷新。
3.2 三个格式的最小 demo
PPT——3 行出幻灯片:
officecli create slides.pptx officecli add slides.pptx / --type slide \ --prop title="Q4 Report" --prop background=1A1A2E officecli add slides.pptx '/slide[1]' --type shape \ --prop text="Revenue grew 25%" \ --prop x=2cm --prop y=5cm \ --prop font=Arial --prop size=24 --prop color=FFFFFF
Word——2 行出报告:
officecli create report.docx officecli add report.docx /body --type paragraph \ --prop text="Executive Summary" --prop style=Heading1
Excel——1 行填数据:
officecli create data.xlsx officecli set data.xlsx /Sheet1/A1 \ --prop value="Name" --prop bold=true officecli set data.xlsx /Sheet1/A2 \ --prop value="Alice"
就这么简单。
不需要 import、不需要 open()、不需要 save()——
命令执行完,文件直接落地。
3.3 让 AI “看到”效果
这一步是 OfficeCLI 真正拉开差距的地方:
# 渲染成 HTML(浏览器打开就能看) officecli view slides.pptx html -o /tmp/slides.html # 渲染成 PNG 截图(多模态 AI 直接读取) officecli view slides.pptx screenshot -o /tmp/slides.png # 实时预览(本地 HTTP 服务器,自动刷新) officecli watch slides.pptx # → 打开 http://localhost:26315 浏览器实时看效果
关键:
screenshot 命令让 Claude / GPT-4V 等多模态 AI 能”看到”文档的视觉效果。
以前 AI 只能猜排版好不好,现在它能看到——
发现标题太大了、颜色不对了、图表溢出了——然后自己改。
这就是官方说的 “渲染 → 查看 → 修复”闭环。
四、核心亮点
4.1 路径寻址——每个元素都有”地址”
所有文档元素用路径定位,1-based 索引(XPath 约定):
/slide[1]/shape[2] # PPT 第1页第2个形状 /body/p[3] # Word 第3个段落 /Sheet1/A1 # Excel A1单元格 /slide[1]/shape[@id=550950021] # 用稳定ID(不随增删变动)
AI 不需要猜”怎么找到那个标题”,路径就是答案。
4.2 查询——像 CSS 选择器一样找元素
# 找所有 Heading1 段落 officecli query report.docx "paragraph[style=Heading1]" --json # 找所有红色形状 officecli query slides.pptx "shape[fill=FF0000]" # Excel 按列名筛选行 officecli query data.xlsx "Sheet1!row[Salary>5000]"
返回的 JSON 结构一致,AI 直接 parse 就能用。
4.3 模板合并——一行批量出文档
这是我最喜欢的功能。
做个 .docx 模板,里面放 {{key}} 占位符,然后用 JSON 数据替换:
# 单条数据 officecli merge invoice-template.docx out-001.docx \ '{"client":"Acme","total":"$5,200"}' # 批量:JSON 文件 officecli merge q4-template.pptx q4-acme.pptx data.json
Word / Excel / PPT 三种格式都能 merge。
以前用 python-docx 写循环替换的代码,现在一行搞定。
4.4 文档检查——AI 自己找 bug
# 检查文档问题(文字溢出、缺少alt文本、公式错误等) officecli view slides.pptx issues # 对照 OpenXML 规范验证 officecli validate slides.pptx
错误返回结构化 JSON,包含错误码和建议:
{ "success": false, "error": { "error": "Slide 50 not found (total: 8)", "code": "not_found", "suggestion": "Valid Slide index range: 1-8" } }
AI 不需要猜哪里错了——错误信息直接告诉它怎么改。
4.5 常驻模式——改10次只保存1次
每次 officecli set 都会读写文件。改10次就读写10次,慢。
常驻模式把文档保持在内存里,改完最后一次性保存:
officecli open report.docx # 文档进内存 officecli set report.docx ... # 改——不落盘 officecli set report.docx ... # 再改——不落盘 officecli close report.docx # 一次性保存并释放
改10次只需要1次文件 IO。
文档自动空闲 60 秒后释放,不需要手动管。
4.6 批处理——一次传多个操作
# stdin 传入 echo '[{"command":"set","path":"/Sheet1/A1", "props":{"value":"Name","bold":"true"}}, {"command":"set","path":"/Sheet1/B1", "props":{"value":"Score","bold":"true"}}]' \ | officecli batch data.xlsx --json # JSON 文件传入 officecli batch data.xlsx --input updates.json --json # 首次失败即中止 officecli batch data.xlsx --input updates.json \ --stop-on-error --json
五、AI Agent 怎么用
5.1 MCP 一行接入
内置 MCP 服务器,一行命令注册到你的 AI 工具:
officecli mcp claude # Claude Code officecli mcp cursor # Cursor officecli mcp vscode # VS Code / Copilot officecli mcp lmstudio # LM Studio
注册完,AI Agent 直接通过 MCP 工具调用所有命令——
创建文档、编辑元素、渲染截图、检查问题,不需要写任何代码。
5.2 SKILL.md 自动安装
officecli install 装二进制时,会自动检测你电脑上的 AI 工具
(Claude Code、Cursor、Windsurf、GitHub Copilot 等),
然后自动安装 SKILL.md 技能文件。
SKILL.md 内容非常完整(约 350 行),包含:
- 7 个子技能加载规则(
pitch-deck、financial-model 等)
5.3 实际用法:让 Claude 做一份 PPT
装完 MCP 后,你只需要对 Claude Code 说:
“帮我做一份 Q4 销售报告 PPT,5页,深色主题,包含标题页、销售数据页、地区分布页、趋势图页、总结页。”
Claude 会自动:
officecli create slides.pptx- 连续
officecli add 创建 5 页幻灯片 officecli view slides.pptx screenshotofficecli view slides.pptx issues
全程你不需要写一行代码。
5.4 Python / Node SDK
如果你要写自己的自动化脚本:
# Python SDK pip install officecli-sdk from officecli import Doc with Doc("deck.pptx") as d: d.add("/", type="slide", title="Q4 Report") print(d.get("/slide[1]"))
// Node.js SDK npm install @officecli/sdk import { Doc } from "@officecli/sdk"; await using d = await Doc.open("deck.pptx"); await d.add("/", { type: "slide", title: "Q4 Report" }); console.log(await d.get("/slide[1]"));
两个 SDK 都自动配置原生 CLI(镜像优先、Windows 兼容),
缺失时自动安装。
六、功能覆盖一览
这个工具能做的事远比你想的多。列几个让我惊讶的:
| | |
|---|
| 数据透视表 | 一条命令创建原生 OOXML 透视表,支持多字段、日期分组、计算字段 | openpyxl |
| 350+ Excel 函数 | 内置公式引擎,写入时自动求值,不需要 Office 回算 | openpyxl |
| Mermaid→PPT形状 | add --type diagram 把 Mermaid 代码变成原生可编辑 PPT 形状 | |
| LaTeX 公式 | Word 和 PPT 都能输入 LaTeX,自动转 OMML | python-docx |
| Morph 动画 | PPT Morph 过渡 + 15 种强调 + 16 种退出动画 | |
| 3D 模型 | | |
| 修订追踪 | Word 完整 revision API(ins/del/format/move + accept/reject) | python-docx |
| RTL / 国际化 | | |
| 模板合并 | | |
| 往返转储 | dump | |
完整命令参考
| |
|---|
create | 创建空白 .docx/.xlsx/.pptx(按扩展名判断) |
view | 查看(outline/text/stats/issues/html/screenshot/svg/pdf) |
get | |
query | CSS 选择器查询(布尔 and/or、Excel 列名筛选) |
set | 修改属性(--find/--replace 支持正则) |
add | 添加元素(--from 克隆、--after/--before 定位插入) |
remove | |
move | |
swap | |
batch | 批量操作(stdin / --input / --commands) |
merge | |
dump | |
watch | |
open/close | |
validate | |
mcp | |
install | |
load_skill | 加载子技能(pitch-deck、financial-model 等 7 种) |
raw/raw-set | |
add-part | |
refresh | |
plugins | |
七、和你之前可能用过的方案对比
如果你用过 python-docx / openpyxl / python-pptx,最直观的对比:
| | |
|---|
| doc.add_heading("Title", level=1) | officecli add report.docx /body --type paragraph --prop text="Title" --prop style=Heading1 |
| 需要 python-pptx + 找 slide + 找 shape + 改 text | officecli set slides.pptx '/slide[1]/shape[2]' --prop text="New text" |
| | officecli query report.docx "paragraph[style=Heading1]" --json |
| | officecli view slides.pptx screenshot |
| | officecli merge template.docx output.docx data.json |
核心区别:
以前你得写代码,现在你说一句话(或者让 AI 说一句话)就行。
收尾
OfficeCLI 解决的不是”能不能操作 Office 文件”的问题
(python-docx 已经能做了),
而是 “AI Agent 能不能像人一样做文档” 的问题——
看到效果、发现问题、自己修好、输出成品。
如果你想用:
brew install officecli + officecli mcp claude 就够了,不用写代码。
如果你想懂:
跑一遍 examples/ 目录里的 30+ 示例脚本,每种格式每个功能都有 .sh + .py 双版本。
⚡ 项目还在快速迭代(v1.0.120 到 v1.0.129 只用了两周),功能覆盖面惊人但细节还在完善。遇到问题先跑 officecli help <format> <element>——帮助系统比猜靠谱。