开源工具填补空白,让 AI Agent 能直接操作 Word、Excel、PowerPoint,便于自动化办公流程。
OfficeCLI 是世界上第一个、也是最好的为 AI 智能体设计的办公套件。
用一行代码就能让任何 AI 智能体完全控制 Word、Excel 和 PowerPoint。
开源。单一二进制文件。无需安装 Office。无依赖项。运行环境无限制。
OfficeCLI 内置的 HTML 渲染引擎能高保真地重现文档——这就是赋予 AI「眼睛」的东西。它将 .docx / .xlsx / .pptx 渲染为 HTML 或 PNG,闭合了「渲染 → 查看 → 修复」的反馈循环。
English | 中文 | 日本語 | 한국어
🌐 官网:officecli.ai | 💬 社区:Discord
使用 OfficeCLI 在 AionUi 上创建演示文稿的过程
上面的所有文档都是由 AI 智能体使用 OfficeCLI 完全创建的——没有模板,没有手动编辑。
将这段代码粘贴到你的 AI 智能体对话中——它会读取技能文件并自动安装所有内容:
curl -fsSL https://officecli.ai/SKILL.md
就是这样。技能文件会教智能体如何安装二进制文件和使用所有命令。
选项 A —— GUI: 安装 AionUi ——一个桌面应用,让你通过自然语言创建和编辑 Office 文档,由 OfficeCLI 在幕后驱动。只需描述你想要什么,AionUi 就会处理其余部分。
选项 B —— CLI: 从 GitHub Releases 下载适合你平台的二进制文件,然后运行:
officecli install
这会将二进制文件复制到你的 PATH,并将 officecli 技能安装到它检测到的每个 AI 编码智能体中——Claude Code、Cursor、Windsurf、GitHub Copilot 等。你的智能体可以立即代表你创建、读取和编辑 Office 文档,无需额外配置。
# 1. 安装 (macOS / Linux)——或:brew install officecli / npm install -g @officecli/officecli
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
# 2. 创建一个空白 PowerPoint
officecli create deck.pptx
# 3. 启动实时预览——在浏览器中打开 http://localhost:26315
officecli watch deck.pptx
# 4. 打开另一个终端,添加一张幻灯片——观看浏览器实时更新
officecli add deck.pptx / --type slide --prop title="Hello, World!"
就是这样。你运行的每个 add、set 或 remove 命令都会实时刷新预览。继续尝试——浏览器就是你的实时反馈循环。
# 创建演示文稿并添加内容
officecli create deck.pptx
officecli add deck.pptx / --type slide --prop title="Q4 Report" --prop background=1A1A2E
officecli add deck.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
# 以大纲形式查看
officecli view deck.pptx outline
# → Slide 1: Q4 Report
# → Shape 1 [TextBox]: Revenue grew 25%
# 以 HTML 形式查看——在浏览器中打开渲染后的预览,无需服务器
officecli view deck.pptx html
# 获取任何元素的结构化 JSON
officecli get deck.pptx '/slide[1]/shape[1]' --json
# 保存并关闭——将驻留会话刷新到磁盘
officecli close deck.pptx
{
"tag": "shape",
"path": "/slide[1]/shape[1]",
"attributes": {
"name": "TextBox 1",
"text": "Revenue grew 25%",
"x": "720000",
"y": "1800000"
}
}
原来需要 50 行 Python 代码和 3 个独立库的工作:
from pptx import Presentation
from pptx.util import Inches, Pt
prs = Presentation()
slide = prs.slides.add_slide(prs.slide_layouts[0])
title = slide.shapes.title
title.text = "Q4 Report"
# ... 45 more lines ...
prs.save('deck.pptx')
现在只需一条命令:
officecli add deck.pptx / --type slide --prop title="Q4 Report"
从零开始创建文档——空白或包含内容
以纯文本或结构化 JSON 形式读取文本、结构、样式、公式
分析格式问题、样式不一致和结构问题
修改任何元素——文本、字体、颜色、布局、公式、图表、图像
跨文档重新组织内容——添加、删除、移动、复制元素
Word ——完整的国际化 & RTL 支持(按脚本类型的字体槽位、按脚本类型的 BCP-47 语言标签 lang.latin/ea/cs、复杂文字的加粗/斜体/大小、方向=rtl 级联通过段落/运行/节/表格/样式/页眉/页脚/docDefaults、rtlGutter + pgBorders 简写、特定地区的页码编号支持阿拉伯语/印地语/泰语/汉字;create --locale ar-SA 自动启用 RTL)、段落(framePr、tabs 简写、基于字符的缩进)、运行(underline.color、位置半磅)、表格(虚拟列操作 add/remove/move/copyfrom、hMerge)、样式、文本框 / 形状(文本框:旋转、文本方向 eaVert/vert270、渐变、阴影、不透明度)、页眉/页脚、图像(PNG/JPG/GIF/SVG)、方程(LaTeX 输入)、图表(mermaid → 原生可编辑形状,或任何 mermaid 类型作为全保真 PNG)、注释、脚注、水印、书签、目录、图表、超链接、节、表单字段、内容控制(SDT)、字段(22 个零参数类型 + MERGEFIELD / REF / PAGEREF / SEQ / STYLEREF / DOCPROPERTY / IF)、OLE 对象、修订 / 跟踪的更改(revision.type=ins|del|format|moveFrom|moveTo + revision.action=accept|reject、按目标 /revision[@author=Alice] 选择器、跟踪的查找和替换)、页面背景颜色、文档属性
Excel ——单元格(添加时的音标指南 / 假名、Excel-UI 删除时 --shift left|up / 添加时 shift=right|down)、公式(350+ 个内置函数,具有自动评估功能、具有 _xlfn. 自动前缀的溢出动态数组、金融 / 债券和统计系列、OFFSET/INDIRECT、已定义名称的公式体在解析时内联、行/列插入时的公式引用重写)、工作表(可见/隐藏/非常隐藏、打印边距、printTitleRows/Cols、RTL sheetView、级联感知的工作表重命名、打开时的空单元格膨胀过滤)、布尔 and/or 选择器(row[Salary>5000 and Region=EMEA])、表格、排序(工作表 / 范围、多键、边车感知)、条件格式、图表(包括盒须图、帕累托图,具有自动排序 + 累积百分比、对数轴)、数据透视表(多字段、日期分组、showDataAs、排序、总计、小计、紧凑/大纲/表格式布局、重复项标签、空白行、计算字段、持久 labelFilter / topN 过滤、缓存 CoW + 跨透视表共享)、切片器、命名范围、数据验证、图像(PNG/JPG/GIF/SVG,具有双重表示备用)、迷你图、注释(RTL)、自动筛选、形状、OLE 对象、CSV/TSV 导入、$Sheet:A1 单元格寻址
PowerPoint ——幻灯片(页眉/页脚/日期/幻灯片编号切换、隐藏)、形状(图案填充、模糊效果、超链接工具提示 + 幻灯片跳转链接、运行时的高亮颜色、slideMaster/slideLayout 类型化 add/set/remove、箭头别名、effective.X + effective.X.src)、图像(PNG/JPG/GIF/SVG、填充模式:stretch/contain/cover/tile、亮度/对比度/辉光/阴影、旋转、链接 + 工具提示)、表格(内置 PowerPoint 样式目录、虚拟 /col[C] get + swap/copyFrom、行/列 Move/CopyFrom、fill/background 别名)、图表(pieOfPie、barOfPie、按属性 axisLine/gridline 设置器、使用主题调色板的系列 add/remove、anchor=x,y,w,h 简写)、动画(15 个强调 + 16 个退出模板支持的预设、多效果链、运动路径预设、repeat/restart/autoReverse、图表动画 + chartBuild)、过渡(morph + p14 + 12 个 p15 PowerPoint 2013+ 预设)、3D 模型(.glb)(组合旋转=ax,ay,az)、幻灯片缩放、方程(LaTeX 输入)、图表(mermaid 流程图 / 序列 → 原生可编辑形状,或任何 mermaid 类型作为全保真 PNG)、主题、连接器(from/to 接受完整的 /slide[N]/shape[@name=Foo] 路径)、视频/音频(loop、autoStart)、组(链接 + 工具提示;Get/Query/Add/Remove 全部下降到组中)、注释(RTL、lang)、注释(RTL、遗留 + 现代 p188 线程式往返)、SmartArt(通过 add-part + raw-set 往返)、OLE 对象、占位符(通过 phType 添加/设置)
从数据库或 API 自动生成报告
批量处理文档(批量查找/替换、样式更新)
在 CI/CD 环境中构建文档管道(从测试结果生成文档)
在 Docker/容器化环境中进行无头 Office 自动化
从用户提示生成演示文稿(参见上面的示例)
从文档中提取结构化数据到 JSON
在交付前验证和检查文档质量
克隆文档模板并填充数据
CI/CD 管道中的自动文档验证
以单一自包含二进制文件形式交付。.NET 运行时已嵌入——无需安装,无需管理运行时。
# 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 (macOS / Linux)
brew install officecli
# Scoop (Windows)
scoop install officecli
npm install -g @officecli/officecli
或者从 GitHub Releases 手动下载:
验证安装:officecli --version
也可以通过下载的二进制文件自行安装(或者直接运行不带参数的 officecli 触发自动安装):
officecli install # 显式安装 officecli # 不带参数调用同样会触发安装
系统会自动在后台检查更新。可使用 officecli config autoUpdate false 禁用自动更新,或在单次调用时设置 OFFICECLI_SKIP_UPDATE=1 跳过更新。配置文件位于 ~/.officecli/config.json。
内置引擎与生成原语
OfficeCLI 是自包含的。以下能力均随二进制文件提供——无需安装 Office。
OfficeCLI 的核心基石是一套从零构建的高保真 HTML 渲染引擎,它让 AI 智能体能够看到渲染后的文档,而不是根据 DOM 猜测最终效果。该引擎支持形状、图表(趋势线、误差线、瀑布图、蜡烛图、迷你图)、公式(OMML → LaTeX,并使用 KaTeX 渲染)、通过 Three.js 渲染的 3D .glb 模型、平滑切换、幻灯片缩放和形状效果。系统会通过无头浏览器处理渲染后的 HTML,为每一页生成 PNG 截图。共有三种模式:
view html — 独立 HTML 文件,资源以内联形式嵌入。可在任何浏览器中打开。
view screenshot — 每页生成一个 PNG,供多模态智能体直接读取。
watch — 带有自动刷新预览的本地 HTTP 服务器;每次 add / set / remove 操作都会立即更新浏览器。Excel 的 watch 模式支持直接编辑单元格,以及通过拖动重新定位图表。
officecli view deck.pptx html -o /tmp/deck.html officecli view deck.pptx screenshot -o /tmp/deck.png # add --page 1-N for more slides officecli watch deck.pptx # http://localhost:26315
如果没有可视化,生成幻灯片的智能体就像在盲飞——它可以读取 DOM,却无法判断标题是否溢出,也无法判断两个形状是否重叠。由于渲染功能内置于二进制文件中,因此“渲染 → 查看 → 修正”循环可以在 CI、Docker、没有显示器的服务器上运行——只要能运行该二进制文件,就能完成这一流程。
内置 350 多个 Excel 函数,写入时会自动求值——写入 =SUM(A1:A2),再读取该单元格时,值已经计算完成。无需往返调用 Office 重新计算。支持可溢出的动态数组(FILTER / SORT / UNIQUE / SEQUENCE / LET / LAMBDA / MAP)、VLOOKUP / XLOOKUP / INDEX / MATCH、金融与债券计算(XIRR / PRICE / YIELD / DURATION / COUPNUM)、统计分布、检验与回归(NORM.DIST / T.TEST / LINEST),以及日期和文本函数。
此外,还能通过一条命令从源数据区域创建原生 OOXML 数据透视表——支持多字段行/列/筛选器、10 种聚合方式、showDataAs 模式、日期分组、计算字段、前 N 项和多种布局。数据透视表缓存和定义会写入 OOXML,因此 Excel 打开文件时,聚合结果已经填充完毕:
officecli add sales.xlsx '/Sheet1' --type pivottable
--prop source='Data!A1:E10000' --prop rows='Region,Category'
--prop cols=Quarter --prop values='Revenue:sum,Units:avg'
--prop showDataAs=percentOfTotal
merge 会使用 JSON 数据替换任意 .docx / .xlsx / .pptx 文件中的 {{key}} 占位符——覆盖段落、表格单元格、形状、页眉、页脚和图表标题。智能体只需设计一次布局(成本较高);生产代码便可填充 N 次(成本低、结果确定、token 成本为零)。这避免了智能体从头重新生成每份报告,最终产生 N 种不一致布局的问题。
officecli merge invoice-template.docx out-001.docx --data '{"client":"Acme","total":"$5,200"}' officecli merge q4-template.pptx q4-acme.pptx --data data.json
dump 可以将任意 .docx、.pptx 或 .xlsx 序列化——既可以处理整个文档,也可以处理任意子树(单个段落、表格、幻灯片、工作表、样式部件、编号、主题或设置)——生成可重放的批处理 JSON;batch 则负责重放。当用户提供一个希望仿制的样本时,智能体可以读取结构化规范,而不是原始 OOXML XML,然后对其进行修改并重放。这在“我已有一个现成模板”和“请为我生成 100 个变体”之间架起了桥梁。
officecli dump existing.docx -o blueprint.json # whole document officecli dump existing.docx /body/tbl[1] -o table.json # any subtree officecli dump existing.xlsx /Sheet1 -o sheet.json # a single worksheet officecli batch new.docx --input blueprint.json
常驻模式与批处理
对于多步骤工作流,常驻模式会将文档保留在内存中。批处理模式则会在一次处理中应用多个操作。
officecli open report.docx officecli set report.docx /body/p[1]/r[1] --prop bold=true officecli set report.docx /body/p[2]/r[1] --prop color=FF0000 officecli close report.docx
echo '[{"command":"set","path":"/slide[1]/shape[1]","props":{"text":"Hello"}},
{"command":"set","path":"/slide[1]/shape[2]","props":{"fill":"FF0000"}}]'
| officecli batch deck.pptx --json
officecli batch deck.pptx --commands '[{"op":"set","path":"/slide[1]/shape[1]","props":{"text":"Hi"}}]'
officecli batch deck.pptx --input updates.json --best-effort --json
officecli batch deck.pptx --input updates.json --stop-on-error --json
要使用其他工具读取文件吗?请先将其刷新到磁盘。officecli 自身的读取操作(get/query/view)始终能看到最新编辑,因此在 officecli 内部永远无需保存。但处于活动状态的常驻进程会推迟磁盘写入,所以在非 officecli 程序读取文件之前——例如 python-docx/openpyxl、Microsoft Word、渲染器、交付或上传流程——请先刷新文件:
officecli set report.docx /body/p[1] --prop bold=true
officecli save report.docx # flush, keep the resident warm (or close to flush + release)
python my_reader.py report.docx # now sees the edit
活动的常驻进程在进入空闲状态后不久也会自动刷新(自适应时间为 2–10 秒,根据实测的文档保存成本调整)。如果流水线中的其他程序需要在每条命令执行后读取文件,可设置 OFFICECLI_RESIDENT_FLUSH=each——每次修改都会在命令返回前写入磁盘,同时常驻进程继续保持就绪。完整的刷新模型(each/auto/fixed/off、save / close、环境变量调优):wiki → open / close。
三层架构
从简单方式开始,仅在必要时深入底层。
officecli view report.docx annotated officecli view budget.xlsx text --cols A,B,C --max-lines 50
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
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>'
内置 MCP 服务器——只需一条命令即可注册:
officecli mcp claude # Claude Code officecli mcp cursor # Cursor officecli mcp vscode # VS Code / Copilot officecli mcp lmstudio # LM Studio officecli mcp list # Check registration status
它通过 JSON-RPC 将所有文档操作公开为工具——无需 shell 访问权限。
直接集成 CLI
只需两步,即可让 OfficeCLI 与你的 AI 智能体协同工作:
安装二进制文件——只需一条命令(参见“安装”部分)
完成。OfficeCLI 会检查已知的配置目录,自动检测你的 AI 工具(Claude Code、GitHub Copilot、Codex)并安装其技能文件。你的智能体可以立即创建、读取和修改任意 Office 文档。
如果自动安装无法覆盖你的环境,也可以手动安装技能文件:
将 SKILL.md 直接提供给你的智能体:
curl -fsSL https://officecli.ai/SKILL.md
为 Claude Code 安装为本地技能:
curl -fsSL https://officecli.ai/SKILL.md -o ~/.claude/skills/officecli.md
其他智能体:将 SKILL.md 的内容加入智能体的系统提示词或工具描述中。
为什么你的智能体能够在 OfficeCLI 上高效工作
确定性的 JSON 输出——每条命令都支持 --json,并采用一致的 schema。无需使用正则表达式解析,也无需抓取 stdout。
基于路径的寻址——每个元素都有稳定的路径(/slide[1]/shape[2])。智能体无需理解 XML 命名空间即可浏览文档。(OfficeCLI 语法使用从 1 开始的索引和元素局部名称,而不是 XPath。)
渐进式复杂度(L1 → L2 → L3)——智能体从只读视图开始,在需要时升级到 DOM 操作,仅在必要时才回退到原始 XML。最大限度减少 token 使用量。
自愈式工作流——通过 validate 和 view issues,再配合结构化错误代码(not_found、invalid_value、unsupported_property)返回的建议及有效范围,智能体无需人工干预即可自行纠正错误。
内置对 AI 智能体友好的渲染引擎——`view html` / `view screenshot` / `watch` 可原生生成 HTML 和 PNG。无需安装 Office。AI 智能体可以查看自己的输出并修复布局问题,即使是在 CI / Docker / 无头环境中也能做到。
内置公式与数据透视表引擎——写入时自动计算 350 多个 Excel 函数(包括溢出的动态数组、财务 / 债券和统计函数系列);只需一条命令,即可基于源数据区域创建原生 OOXML 数据透视表。无需通过 Office 往返处理,AI 智能体便能立即读取计算结果和最终交付的聚合数据。
模板合并——AI 智能体只需设计一次布局,后续代码即可将数据填入 `{{key}}` 占位符并重复 N 次。避免每次都从头生成报告而消耗大量 token。
往返转储——`dump` 可将任意 `.docx`、`.pptx` 或 `.xlsx` 文件转换为可重放的批处理 JSON。AI 智能体可以通过读取结构化规范来学习人工编写的示例,而不是直接读取原始 OOXML XML。
内置帮助——当不确定属性名称或值格式时,AI 智能体可以运行 `officecli <format> set <element>`,而不必猜测。
自动安装——OfficeCLI 会检测你的 AI 工具(Claude Code、Cursor、VS Code 等)并自动完成配置。无需手动设置技能文件。
不要猜测属性名称——深入查看帮助信息:
officecli help pptx set # All settable elements and properties officecli help pptx set shape # Detail for one element type officecli help docx query # Selector reference: attributes, :contains, :has(), etc.
运行 `officecli --help` 查看完整概览。
所有命令都支持 `--json`。常见的响应结构如下:
单个元素(`get --json`):
{"tag": "shape", "path": "/slide[1]/shape[1]", "attributes": {"name": "TextBox 1", "text": "Hello"}}
元素列表(`query --json`):
[ {"tag": "paragraph", "path": "/body/p[1]", "attributes": {"style": "Heading1", "text": "Title"}}, {"tag": "paragraph", "path": "/body/p[5]", "attributes": {"style": "Heading1", "text": "Summary"}} ]
发生错误时,命令会返回非零退出码,并提供结构化错误对象;该对象包含错误码、建议,以及可用时的有效值:
{ "success": false, "error": { "error": "Slide 50 not found (total: 8)", "code": "not_found", "suggestion": "Valid Slide index range: 1-8" } }
错误码:`not_found`、`invalid_value`、`unsupported_property`、`invalid_path`、`unsupported_type`、`missing_property`、`file_not_found`、`file_locked`、`invalid_selector`。属性名称会自动纠正——属性名称拼写错误时,系统会返回包含最接近匹配项的建议。
错误恢复——AI 智能体通过检查可用元素来自我纠正:
officecli get report.docx /body/p[99] --json
officecli get report.docx /body --depth 1 --json
变更确认(使用 `--json` 的 `set`、`add`、`remove`、`move`、`create`):
{"success": true, "path": "/slide[1]/shape[1]"}
有关退出码和错误格式的完整详情,请参阅 `officecli --help`。
## 端到端工作流示例
一个典型的自愈式 AI 智能体工作流:创建演示文稿、填充内容、验证并修复问题——全程无需人工干预。
officecli create report.pptx
officecli add report.pptx / --type slide --prop title="Q4 Results"
officecli add report.pptx '/slide[1]' --type shape
--prop text="Revenue: $4.2M" --prop x=2cm --prop y=5cm --prop size=28
officecli add report.pptx / --type slide --prop title="Details"
officecli add report.pptx '/slide[2]' --type shape
--prop text="Growth driven by new markets" --prop x=2cm --prop y=5cm
officecli view report.pptx outline officecli validate report.pptx
officecli view report.pptx issues --json
officecli set report.pptx '/slide[1]/shape[1]' --prop font=Arial
所有尺寸和颜色属性都接受灵活的输入格式:
officecli query report.docx "paragraph[style=Heading1]" --json | ... officecli set report.docx /body/p[1]/r[1] --prop text="New Title"
officecli get deck.pptx / --depth 2 --json
officecli batch budget.xlsx --input updates.json --json
officecli add budget.xlsx / --type sheet --prop name="Q1 Data" officecli import budget.xlsx "/Q1 Data" sales.csv --header
officecli merge invoice-template.docx invoice-001.docx --data '{"client":"Acme","total":"$5,200"}'
officecli validate report.docx && officecli view report.docx issues --json
在 Python 或 Node.js 中使用——安装一个轻量级常驻管道 SDK(无需每次调用都创建新进程):
pip install officecli-sdkimport officecli with officecli.create("deck.pptx") as doc: # or officecli.open("deck.pptx") doc.send({"command": "add", "parent": "/", "type": "slide"}) print(doc.send({"command": "get", "path": "/slide[1]"}))
// Node.js — npm install @officecli/sdk
const oc = require("@officecli/sdk");
const doc = await oc.create("deck.pptx"); // or oc.open("deck.pptx")
await doc.send({ command: "add", parent: "/", type: "slide" });
console.log(await doc.send({ command: "get", path: "/slide[1]" }));
await doc.close();
当缺少原生 CLI 时,这两个 SDK 都会自动配置它(优先使用镜像,支持 Windows),并且会明确提示安装过程,而不是静默执行。
或者直接以单次调用方式封装子进程:
import json, subprocess def cli(*args): return json.loads(subprocess.check_output(["officecli", *args, "--json"], text=True)) cli("create", "deck.pptx")
Wiki 为每条命令、每种元素类型和每个属性都提供了详细指南:
按格式:Word | Excel | PowerPoint
工作流:端到端示例——Word 报告、Excel 仪表盘、PowerPoint 演示文稿、批量修改、常驻模式
可运行示例:`examples/`——可直接复制粘贴的脚本(`.s`