Skip to content

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

Office Harness

面向 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 数据,并非已实现的自动审稿或视觉验收功能。

1. 环境要求

最短安装路径(Claude Code + Codex + 通用 Agent)

本项目提供标准 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 导出。

2. 下载和安装 CLI

方法 A:从 GitHub 安装(推荐)

在 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 RemoteSigned

方法 B:直接用 pip 从 GitHub 安装

py -m pip install "git+https://github.com/ybszm/office-harness.git"
cli-anything-office --help

这种方式适合只使用 CLI;如果还要安装 Skill,推荐方法 A,以便保留 skills/ 目录。

3. 安装 Agent Skill

Skill 是给 Agent 阅读的操作规范,CLI 才是真正执行 Office 操作的工具。两者都要安装。

Codex CLI / Codex IDE

官方规范要求每个 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,并在第二个工作表写入汇总公式。

Claude Code

将同一 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\。

验证 Skill 和 CLI

让 Agent 执行:

使用 cli-anything-office skill,先运行 cli-anything-office --help,
再创建一个只有标题“安装成功”的 PowerPoint 并导出到当前目录。

成功标准:当前目录出现项目 JSON 和 install-check.pptx,PowerPoint 能正常打开该文件。

4. 核心概念:项目文件与导出文件

如果采用最上方 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。

5. Word 完整示例

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 info

6. Excel 完整示例

cli-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-excel

PowerShell 对 JSON 引号的处理与 CMD 不同;如果 set-range 报 JSON 错误,优先使用外层单引号,如上例所示。

7. PowerPoint 完整示例

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 academic

8. 命令总览

cli-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 --help

Agent 集成建议使用 --json 获得结构化输出:

cli-anything-office --json --project deck.office-cli.json document info

9. 交互式 REPL

cli-anything-office

进入后可直接输入子命令。输入 help 查看命令,输入 quit 退出。复杂任务仍推荐显式使用项目文件,便于复现和审计。

10. 测试

数据层测试不需要安装 Office:

pip install -e ".[dev]"
pytest

真实 COM 导出测试必须在安装了桌面版 Office 的 Windows 会话中手工执行。CI 只覆盖不启动 GUI 的单元测试。

11. 常见问题

pywintypes.com_error 或“无效的类字符串”

  1. 确认安装的是桌面版 Office,而不是只有网页版。
  2. 分别手工启动 Word、Excel、PowerPoint,完成首次启动和激活。
  3. 确保运行 Python 的 Windows 用户有权启动 Office。
  4. 重装 pywin32:pip install --force-reinstall pywin32。

命令找不到 cli-anything-office

确认虚拟环境已激活,并运行:

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

Office 后台残留进程

正常路径会关闭由 harness 启动的独立 Office 实例。若 Office 自身崩溃,可先保存工作,再在任务管理器中结束对应的 WINWORD.EXE、EXCEL.EXE 或 POWERPNT.EXE。不要在有未保存文档时强制结束进程。

12. 更新与卸载

更新源码安装:

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 -Force

13. 架构

Agent / 用户
    ↓
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)。

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages