目录

OfficeCLI:把 Office 三件套切给 AI Agent 的单 binary CLI

OfficeCLI:把 Office 三件套切给 AI Agent 的单 binary CLI

一句话核心判断

让 AI Agent 写 Word、Excel、PowerPoint 的常见做法是用 python-docx / openpyxl 等 Python 库,但 Agent 调用经常要面对"装依赖、调 API、看不懂自己写出来的东西、还要重新渲染验证"的循环。iOfficeAI/OfficeCLI(仓库 iOfficeAI/OfficeCLI)的目标是把这一切压成一个二进制 + 三层命令L1 语义阅读 / L2 元素级操作 / L3 XML 直通,并通过内置 HTML 渲染引擎让 Agent 在改完文件后能立即看到效果(live preview)。这等于把 Office 三件套变成"文本输入可控、渲染闭环"的工作环境——属于 Agent 工作流很少见的开箱即用方案。

如果只是临时写一份 Word 模板、Agent 与 Office 完全解耦,则 python-docx + LibreOffice headless 就够;如果要让 Agent 真正闭环地"边写边看",OfficeCLI 是当前最接近"即装即用"的路径之一。

系统地图:三层架构

OfficeCLI 把对 Office 文件的操作分三层,从高级到低级逐步下钻:

┌────────────────────────────────────────────────────────────────────┐
│  L1  Read  │  view  text/annotated/outline/stats/issues/html/svg   │
│             │  screenshot          ——  语义级视图,回灌到 Agent     │
├────────────────────────────────────────────────────────────────────┤
│  L2  DOM   │  get / query / set / add / remove / move / swap       │
│             │             ——  元素级操作,path-based 定位           │
├────────────────────────────────────────────────────────────────────┤
│  L3  Raw   │  raw / raw-set / add-part / validate                  │
│             │             ——  XPath 直接读写 OOXML                │
└────────────────────────────────────────────────────────────────────┘
                    ↑                                   ↑
                    └───── 单 binary + JSON Schema ─────┘

分层带来的好处是:Agent 通常工作在 L1/L2,遇到不支持的 case 再 L3 直通 XML,不会被强制"反序列化 - 改 - 序列化"的循环吞噬

关键判断:为什么不是"再多一个 Office 库"

把 OfficeCLI 与几个常见方案并列看,差异很直白:

维度OfficeCLIMicrosoft OfficeLibreOfficepython-docx / openpyxl
开源免费✓ Apache 2.0✗ 商业授权
AI 原生 CLI + JSON
单 binary 零安装Python + pip
跨语言调用✓ 任意语言✗ COM/插件✗ UNO API仅 Python
Path-based 元素访问
Raw XML 兜底部分
内置 HTML/PNG 渲染
跨格式 {{key}} 模板合并
Round-trip dump → batch JSON
Live preview
Headless / CI部分

四个差异化点尤其值得记住:

  • 单 binary + 跨语言:任意语言 shell 调用,子代理 / MCP server 不必被绑死 Python。
  • Path-based DOM:元素级"路径→动作"操作,避免"先 dump 全文、改、再 save"的脆弱链路。
  • Live preview:写完自动 HTML 渲染到 localhost:26315,Agent 可直接拿截图/HTML 回灌到 LLM context。
  • 跨格式模板合并{{key}} 既能在 PowerPoint 也能在 Word / Excel 里复用同一份数据。

L1:语义阅读——Agent 真的能"看"自己写的东西

Agent 在传统流程里写完一个文件后,验证手段只有"读文本 / 重新打开 GUI"两条;前者丢排版信息,后者又重又非 Headless。OfficeCLI 的 L1 直接给多种语义视图:

  • text:纯文本,对 Agent 友好
  • annotated:带结构标注的视图(节、段落、表格)
  • outline:大纲级
  • stats:页数等基础统计
  • issues:可能的格式问题
  • html / svg:HTML/SVG 渲染
  • screenshot:直接 PNG 截图

关键是这些视图背后统一指向同一个 renderer:HTML 渲染引擎直接把 OOXML 转到 HTML/PNG,意味着 Agent 看到的"图片"和真实 Office 渲染一致。这是 README 反复强调的"render → look → fix"闭环。

最小示例:

officecli view report.docx annotated
officecli view budget.xlsx text --cols A,B,C --max-lines 50

L2:DOM 操作——为什么"path-based"关键

写 Office 文档时最大的痛点之一是"定位 + 改 + 不破坏其它节点"。很多库要么采用"全文件反序列化、改、序列化"(破坏注释 / 格式),要么采用"运行一段 VBScript / 宏"(慢且不安全)。

OfficeCLI 的 L2 用 path-based 操作:

officecli query report.docx "run:contains(TODO)"
officecli add budget.xlsx / --type sheet --prop name="Q2 Report"
officecli move report.docx /body/p[5] --to /body --index 1

/body/p[5] 这样的 XPath 风格路径让模型直接定位、且行为可预测:对指定 path 改一个属性,其它节点原样保留——这是 OOXML 编辑最容易出现的"序列化破坏格式"的反面。

query 也支持 run:contains(...) 这样的 helper 谓词,方便定位"包含 TODO 的段落"这种语义搜索。

L3:Raw XML——L2 不够用时的兜底

OOXML 文件本质是 ZIP + XML 的集合,所有高级库都不可能覆盖 100% 的元素语义;当 L2 不够用时,OfficeCLI 提供 L3 直通:

officecli raw deck.pptx '/slide[1]'
officecli raw-set report.docx document \
  --xpath "//w:p[1]" --action append \
  --xml '<w:r><w:t>Injected text</w:t></w:r>'

raw-set 接受 XPath + 自定义 XML,典型场景:插入复杂公式、注音、SmartArt 这种 L2 没现成命令的元素。L3 的存在意味着用户可以兜底任何 L2 不支持的需求,不必切到另一套工具。

Live preview:让 Agent 真正"看见"自己写的东西

传统路线的痛点是 Agent 写完文档后只能"猜"对不对:

  1. 写 → 写完了
  2. 关掉 IDE → 重新打开 Office → 看渲染
  3. 不对 → 改 prompt → 重写

OfficeCLI 提供一个常驻 daemon:每次有 add/set/remove 命令运行时,立刻刷新内嵌 HTML 渲染,把结果实时推到 http://localhost:26315。下面的 30 秒最小示例(README 自带):

# 1. 安装
curl -fsSL https://raw.githubusercontent.com/iOfficeAI/OfficeCLI/main/install.sh | bash

# 2. 创建一个空白 PPT
officecli create deck.pptx

# 3. 启动 live preview(后台跑)
officecli watch deck.pptx

# 4. 另开 terminal,往里加一页(浏览器会实时刷新)
officecli add deck.pptx / --type slide --prop title="Hello, World!"

结合 MCP server + Live preview,Agent 可以做到"写一页 → 截图 → 让 LLM 比对效果 → 重写"。这种循环在 Headless 环境也能跑(CI 里加 --headless flag + 调截图 API 即可)。

MCP Server:被 Claude Code / Cursor / Codex 一键接管

README 里明确写了"OfficeCLI 同时配套一个 MCP server",这意味着用户可以直接走 claude mcp add 把 Office 操作集注册给 Agent。MCP 工具集大致对应:

  • view 系列:L1 语义读取
  • add / set / remove / move:L2 DOM 操作
  • raw / raw-set:L3 XML 直通

完整工具清单可以对照 README 的"MCP Server"小节。对用过 MCP 标准协议的 Agent 来说,OfficeCLI 等于把"操作 Office 文件"变成又一组 tool call——和 Read / Write 工具同等级别,不会遇到"shell 调用还是 API 调用"的判断困难。

安装路径

三种典型路径,按场景选:

路径 A:仅 CLI

# 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

路径 B:让 Agent 自动装

curl -fsSL https://officecli.ai/SKILL.md

SKILL.md 文件会指引 Agent 自动下载二进制 + 注册 skill,所有命令大致上面都覆盖。

路径 C:GUI 体验

AionUi(仓库 iOfficeAI/AionUi)是基于 OfficeCLI 的桌面 GUI——自然语言描述文档需求,由 Agent 通过 OfficeCLI 完成。

适用边界

适合

  • Agent 要在生产环境批量产出 Word/Excel/PPT,且需要实时闭环验证
  • 需要把文档生成嵌入 CI(如"日报 / 报告 / 模板填充自动化")
  • 多语言栈团队(不必绑死 Python)
  • 想要"现成的 Agent Skill"——安装路径里的 SKILL.md 即装即用

不太适合

  • 只是偶尔手动改一份 Word 模板——CLI 学习的投入产出比低
  • 需要 Office 原生宏 / VBA 行为——这是 OOXML 之外的另一层
  • 大型 OLE 嵌入对象 / 复杂 SmartArt——L2 还没覆盖到,需要 L3
  • 与企业 Sharepoint / OneDrive 强耦合的流程——属于另一个集成层

一句话总结

OfficeCLI 把"Office 三件套给 Agent 用"这件事做成单 binary + 三层命令 + Live preview + MCP,对已经习惯 MCP 协议的 Claude Code / Cursor 来说几乎是"即装即用"。三个主要差异化点是 path-based DOM、跨语言单 binary、和内置 HTML/PNG 渲染闭环。

参考链接