面向 AI Agent 和自动化脚本的 Microsoft Office 命令行工具。通过 Windows COM 直接驱动 Microsoft Word、Excel 和 PowerPoint,不依赖 WPS,也不包含 Photoshop、Illustrator、Zotero 等模块。
项目重构自 yb2460/harness-anything 的 WPS 模块,保留其“JSON 中间项目 + CLI + COM 导出”思路,并将运行后端改为 Microsoft Office 原生 ProgID。
1.1 新增:上游 WPS/ 院校模板库迁移。 17 套内容模板 + 上海交大背景模板,
统一生成 PowerPoint .pptx、原生 .potx 模板、PDF 和逐页 PNG。
文字、卡片和表格可编辑;背景沿用上游图片。用法和素材清单见 模板指南,
迁移与验证记录见 迁移报告。
无需运行代码即可先下载 Office 原生 POTX 模板。
cli-anything-office template list
cli-anything-office template init tsinghua ./my-deck
cli-anything-office template validate ./my-deck/template.json
cli-anything-office template render ./my-deck/template.json ./output/tsinghua.potx --pdf --previews上游有 144 处图片引用缺少对应文件。默认会在启动 Office 前报错;可显式使用
--missing-assets placeholder 生成带醒目标记的草稿。不会伪造图表或静默省略图片。
院校介绍、招生数字及日期是上游历史示例,迁移不代表核实或更新这些内容。
| 应用 | CLI 命令组 | 主要能力 | 常用输出 |
|---|---|---|---|
| Word | word |
标题、段落、列表、表格、图片、查找替换 | DOCX、DOC、PDF、TXT、RTF、HTML |
| Excel | excel |
工作表、单元格、公式、区域写入、合并单元格 | XLSX、XLS、CSV、PDF、HTML |
| PowerPoint | powerpoint |
幻灯片、标题与正文、文本框、形状、图片、设计预设 | PPTX、PPT、PDF |
通用文档编辑先写入可审计的 .office-cli.json 项目文件;export render 再启动 Office 生成真实文件。院校模板使用单独的 template.json 与 template render,无需 --project。两种格式不能混用。
当前 document open 只打开本工具 JSON,不会导入任意已有 DOCX/XLSX/PPTX。
撤销/重做历史只保存在同一个 REPL 进程中;JSON 只保存项目内容。
PPT 的 --talk-type 保存演讲类型元数据,不自动生成整套页面;布局/质量规则是
辅助 Python 数据,并非已实现的自动审稿或视觉验收功能。
本项目提供标准 Agent Skills 格式,不绑定任何模型供应商。在安装好 Windows Python 和桌面 Office 的电脑上执行:
git clone https://github.com/ybszm/office-harness.git
cd office-harness
py install.py --agent all此脚本同时安装 Claude Code 和 Codex 的 Skill,并各自创建独立 .venv、
安装本仓库 CLI。无需手动改 PATH,也无需激活虚拟环境。首次安装需要联网下载
Python 依赖;不会安装 Office、修改系统执行策略或保存任何 API Key。
安装后重启 Agent,直接说:“使用 cli-anything-office 创建项目周报 PPT”。
该方式使用安装时源码的非 editable 副本,之后可移动源码目录。
| Agent / 环境 | 安装方式 | 支持边界 |
|---|---|---|
| Claude Code,本机 Windows | py install.py --agent claude |
标准个人 Skill,需本地命令执行权限 |
| OpenAI Codex CLI / IDE,本机 Windows | py install.py --agent codex |
默认用户 .codex/skills,尊重 CODEX_HOME |
| 其他支持 Agent Skills 的 Agent | py install.py --dest "D:\AgentSkills\cli-anything-office" |
把目标设为该 Agent 实际扫描的 Skill 目录 |
| 自建 Agent / Agent SDK | 读取 SKILL.md,配置 Windows shell 工具调用 launcher | 需要开发者接入,不是现成 MCP/API 插件 |
| 网页 ChatGPT / Claude、纯云端 Agent | 不支持仅靠上传 Skill 直接控制本机 Office | 需要另行部署 Windows 执行端,本项目未提供远程服务 |
兼容的是标准指令格式和 shell 调用协议;未声称已经逐款验证所有 Agent。 本版验证了 CLI、安装路径计算、启动脚本和本机 PowerPoint 模板生成; 其他 Office 安装版本及各 Agent 客户端仍需在对应环境验收。
没有 Git:在 GitHub 点击 Code → Download ZIP,解压后在包含 install.py
的目录运行 py install.py --agent all。不能只下载 SKILL.md 就获得完整运行环境。
预览安装目标(不修改任何文件):
py install.py --agent all --plan更新已有安装(仅覆盖本安装器创建的 Skill):
git pull
py install.py --agent all --upgrade如果目标目录已有手工安装的 Skill,安装器会停止,避免覆盖它。
先自行备份/重命名旧目录,或改用 --dest 指定新目录。
安装后诊断(以 Claude Code 为例):
& "$env:USERPROFILE\.claude\skills\cli-anything-office\.venv\Scripts\python.exe" "$env:USERPROFILE\.claude\skills\cli-anything-office\scripts\doctor.py"诊断不会启动 Office;注册项存在也不代表已经激活或通过真实导出测试。 需要手动运行下方一个生成示例并用 Office 打开结果验收。
- Windows 10 或 Windows 11(本地 Windows Python;不要使用 WSL Python)
- 桌面版 Microsoft Office 2016/2019/2021、Microsoft 365 Apps
- Python 3.10 或更高版本
- Git
- Word、Excel、PowerPoint 已完成首次启动与许可激活
Office COM 只能在 Windows 桌面环境运行。Linux、macOS、WSL 和纯云端容器可以运行数据层测试,但不能执行真实 Office 导出。
在 PowerShell 中执行:
git clone https://github.com/ybszm/office-harness.git
cd office-harness
py -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install --upgrade pip
pip install -e .
cli-anything-office --help如果 PowerShell 禁止激活脚本,可先执行:
Set-ExecutionPolicy -Scope CurrentUser RemoteSignedpy -m pip install "git+https://github.com/ybszm/office-harness.git"
cli-anything-office --help这种方式适合只使用 CLI;如果还要安装 Skill,推荐方法 A,以便保留 skills/ 目录。
Skill 是给 Agent 阅读的操作规范,CLI 才是真正执行 Office 操作的工具。两者都要安装。
官方规范要求每个 Skill 使用独立目录并包含一个 SKILL.md。将仓库中的 skills\cli-anything-office 整个目录复制到 Codex skills 目录:
$target = Join-Path $env:USERPROFILE ".codex\skills\cli-anything-office"
New-Item -ItemType Directory -Force -Path $target | Out-Null
Copy-Item ".\skills\cli-anything-office\*" $target -Recurse -Force如果只想下载 Skill、不克隆整个仓库,可在 PowerShell 中执行:
$target = Join-Path $env:USERPROFILE ".codex\skills\cli-anything-office"
New-Item -ItemType Directory -Force -Path $target | Out-Null
Invoke-WebRequest `
"https://raw.githubusercontent.com/ybszm/office-harness/main/skills/cli-anything-office/SKILL.md" `
-OutFile (Join-Path $target "SKILL.md")这只安装 Agent 指令;仍需按第 2 节安装 cli-anything-office CLI。
重新启动 Codex,然后用显式名称触发:
$cli-anything-office 创建一个三页的项目周报 PPT,保存为 report.pptx。
也可以自然语言触发:
使用 Office Harness,把这份数据做成 Excel,并在第二个工作表写入汇总公式。
将同一 Skill 复制到 Claude Code 的 skills 目录:
$target = Join-Path $env:USERPROFILE ".claude\skills\cli-anything-office"
New-Item -ItemType Directory -Force -Path $target | Out-Null
Copy-Item ".\skills\cli-anything-office\*" $target -Recurse -Force重启 Claude Code 后,在请求里写明“使用 cli-anything-office skill”。不同版本的 Claude Code 对个人 Skill 目录支持可能变化;若无法发现 Skill,可把 SKILL.md 放到当前项目的 .claude\skills\cli-anything-office\。
让 Agent 执行:
使用 cli-anything-office skill,先运行 cli-anything-office --help,
再创建一个只有标题“安装成功”的 PowerPoint 并导出到当前目录。
成功标准:当前目录出现项目 JSON 和 install-check.pptx,PowerPoint 能正常打开该文件。
如果采用最上方 install.py 安装方式,在当前 PowerShell 定义此简写后,即可运行
下方所有示例(此处选 Claude 安装位置;只安装 Codex 时改成 .codex):
function cli-anything-office {
& "$env:USERPROFILE\.claude\skills\cli-anything-office\.venv\Scripts\python.exe" "$env:USERPROFILE\.claude\skills\cli-anything-office\scripts\run.py" @args
}Agent 会按 Skill 中的绝对路径调用 launcher,不需要此交互式简写。
一次性 CLI 调用结束后,进程内状态会消失,因此连续编辑时应始终使用 --project:
# 创建中间项目
cli-anything-office document new --type word --name "周报" -o weekly.office-cli.json
# 后续命令都重新加载并自动保存该项目
cli-anything-office --project weekly.office-cli.json word add-heading -t "本周进展" -l 1
cli-anything-office --project weekly.office-cli.json word add-paragraph -t "完成 Office Harness 重构。"
# 调用 Microsoft Word 输出真实文件
cli-anything-office --project weekly.office-cli.json export render weekly.docx -p docx项目类型在 CLI 和 JSON 中统一使用 word、excel、powerpoint。
cli-anything-office document new --type word --name "项目报告" -p a4_portrait -o report.office-cli.json
cli-anything-office --project report.office-cli.json word add-heading -t "项目报告" -l 1
cli-anything-office --project report.office-cli.json word add-paragraph -t "这是报告摘要。" --font-size 12pt
cli-anything-office --project report.office-cli.json word add-list -i "需求分析" -i "实现" -i "测试" --style number
cli-anything-office --project report.office-cli.json word add-table --rows 4 --cols 3
# 可选:先将自己的 chart.png 放到 assets 目录;没有图片就跳过下一行。
cli-anything-office --project report.office-cli.json word add-image ".\assets\chart.png" --width 12cm
cli-anything-office --project report.office-cli.json word find-replace "项目报告" "最终报告"
cli-anything-office --project report.office-cli.json export render report.docx -p docx
cli-anything-office --project report.office-cli.json export render report.pdf -p pdf查看当前内容:
cli-anything-office --project report.office-cli.json word list
cli-anything-office --project report.office-cli.json document infocli-anything-office document new --type excel --name "销售统计" -o sales.office-cli.json
cli-anything-office --project sales.office-cli.json excel set-cell A1 "产品"
cli-anything-office --project sales.office-cli.json excel set-cell B1 "销售额"
cli-anything-office --project sales.office-cli.json excel set-range A2 -d '[["A",1200],["B",1800],["C",900]]'
cli-anything-office --project sales.office-cli.json excel set-cell B5 0 --type float --formula "=SUM(B2:B4)"
cli-anything-office --project sales.office-cli.json excel add-sheet -n "说明"
cli-anything-office --project sales.office-cli.json excel list-sheets
cli-anything-office --project sales.office-cli.json export render sales.xlsx -p xlsx
cli-anything-office --project sales.office-cli.json export render sales.pdf -p pdf-excelPowerShell 对 JSON 引号的处理与 CMD 不同;如果 set-range 报 JSON 错误,优先使用外层单引号,如上例所示。
cli-anything-office document new --type powerpoint --name "技术方案" -p presentation_16_9 -o deck.office-cli.json
cli-anything-office --project deck.office-cli.json powerpoint add-slide -t "技术方案" -c "Office 自动化"
cli-anything-office --project deck.office-cli.json powerpoint add-slide -t "架构" -c "Agent → CLI → COM → Office"
cli-anything-office --project deck.office-cli.json powerpoint add-element 1 --type text_box --text "可编辑输出" --x 2cm --y 5cm --width 8cm --height 2cm
# 可选:先准备 assets/architecture.png;没有图片就跳过下一行。
cli-anything-office --project deck.office-cli.json powerpoint add-element 1 --type image --path ".\assets\architecture.png" --x 12cm --y 5cm --width 10cm --height 6cm
cli-anything-office --project deck.office-cli.json preset apply academic --talk-type defense
cli-anything-office --project deck.office-cli.json powerpoint list-slides
cli-anything-office --project deck.office-cli.json export render deck.pptx -p pptx
cli-anything-office --project deck.office-cli.json export render deck.pdf -p pdf-powerpoint查看可用设计预设、演讲类型和布局:
cli-anything-office preset list
cli-anything-office preset info academiccli-anything-office
├── document new / open / save / info / profiles / json
├── word add-paragraph / add-heading / add-list / add-table
│ add-page-break / add-image / remove / list / set-text / find-replace
├── excel add-sheet / remove-sheet / rename-sheet / set-cell
│ get-cell / set-range / merge-cells / list-sheets
├── powerpoint add-slide / remove-slide / set-content / list-slides / add-element
├── style create / modify / list / apply / remove
├── preset list / info / apply
├── export presets / preset-info / render
└── session status / undo / redo / history
任意层级均可追加 --help:
cli-anything-office powerpoint add-element --help
cli-anything-office export render --helpAgent 集成建议使用 --json 获得结构化输出:
cli-anything-office --json --project deck.office-cli.json document infocli-anything-office进入后可直接输入子命令。输入 help 查看命令,输入 quit 退出。复杂任务仍推荐显式使用项目文件,便于复现和审计。
数据层测试不需要安装 Office:
pip install -e ".[dev]"
pytest真实 COM 导出测试必须在安装了桌面版 Office 的 Windows 会话中手工执行。CI 只覆盖不启动 GUI 的单元测试。
- 确认安装的是桌面版 Office,而不是只有网页版。
- 分别手工启动 Word、Excel、PowerPoint,完成首次启动和激活。
- 确保运行 Python 的 Windows 用户有权启动 Office。
- 重装 pywin32:
pip install --force-reinstall pywin32。
确认虚拟环境已激活,并运行:
python -m pip show cli-anything-office
python -m cli_anything.office --help默认不覆盖已有文件。使用 --overwrite:
cli-anything-office --project deck.office-cli.json export render deck.pptx -p pptx --overwrite正常路径会关闭由 harness 启动的独立 Office 实例。若 Office 自身崩溃,可先保存工作,再在任务管理器中结束对应的 WINWORD.EXE、EXCEL.EXE 或 POWERPNT.EXE。不要在有未保存文档时强制结束进程。
更新源码安装:
cd office-harness
git pull
pip install -e .卸载 CLI:
pip uninstall cli-anything-office卸载 Codex Skill:
Remove-Item "$env:USERPROFILE\.codex\skills\cli-anything-office" -Recurse -ForceAgent / 用户
↓
SKILL.md(操作规范)
↓
cli-anything-office(Click CLI)
↓
.office-cli.json(可审计中间项目)
↓
pywin32 + COM(DispatchEx 独立实例)
↓
Word / Excel / PowerPoint
本项目采用 MIT License。核心数据模型、CLI 结构和部分样式系统源自 yb2460/harness-anything,原项目同样采用 MIT License;本仓库聚焦 Microsoft Office 并移除了其他应用模块。
Codex Skill 的标准结构说明见 OpenAI 官方文档。
Claude Code 的个人 Skill 目录和调用方式见 Claude Code 官方文档。 PowerPoint 格式常量按 Microsoft PpSaveAsFileType 区分 PPTX(24)和 PPT(1)。