让 AI Agent 像操作人一样操控 WPS Office:cli-anything-wps 全面解析
核心问题:AI Agent 能不能直接操控闭源办公软件?
能,前提是软件暴露了可编程接口——cli-anything-wps 证明了这一点。 它把 WPS Office 的 COM 自动化接口封装成 47 个命令行指令,让 AI Agent 可以像操控 GIMP、Blender 这些开源软件一样,在终端里完成对 WPS 的全部操作。
长期以来,AI Agent 操控桌面软件的能力被限制在一个狭窄的圈子里。CLI-Anything 是这个领域里出色的项目——一行命令就能驱动 GIMP 修图、Blender 建模、LibreOffice 写文档。但它有一个硬伤:只支持开源软件。
这个限制在现实中很致命。大量行业软件是闭源的:WPS Office 是国内最主流的办公套件,Adobe 全家桶是设计行业的事实标准。它们的闭源生态让 AI Agent 无法直接接入,而人们在工作中最需要的恰恰是这些工具。
cli-anything-wps 的答案很直接:只要软件有可编程接口,就能接入 AI 的指挥系统。 WPS 在 Windows 上暴露了完整的 COM 自动化接口,并且与 Microsoft Office VBA 高度兼容。按照 CLI-Anything 的 7 阶段 Harness 方法论,这个项目手搓了一个 WPS 控制器,把 47 个 CLI 命令对接到 WPS 的三个核心应用上。
反思:这个项目让我重新理解了”开源 vs 闭源”在 AI Agent 时代的含义。开源软件的好处不是”更好”,而是”接口可见”。但闭源软件只要愿意暴露自动化接口,在 AI 操控这个维度上,能力差距可以被完全抹平。
图片来源:Unsplash
cli-anything-wps 是什么:一个把 COM 接口变成 CLI 命令的桥梁
本文欲回答的核心问题:cli-anything-wps 具体做了什么,解决了什么问题?
它将 WPS Office 的 COM 自动化接口翻译成了 47 个结构化的命令行指令,使 AI Agent 能够在不打开图形界面的情况下完成文档创建、编辑、格式化和导出的全流程。 这意味着,你可以在终端里、在脚本里、在 AI Agent 的调用链里,像操作文本文件一样操作 WPS 文档。
这个工具基于 CLI-Anything 架构构建。CLI-Anything 本身是一个通用的”命令行驱动桌面软件”框架,而 cli-anything-wps 是它在 WPS 上的具体实现。两者的关系是:框架提供方法论和运行时,cli-anything-wps 提供 WPS 专属的命令集和后端适配。
它的核心价值可以用一句话概括:让闭源软件获得与开源软件同等的自动化可编程性。
图片来源:Unsplash
系统环境与安装:三步跑通
本文欲回答的核心问题:需要什么环境,怎么安装?
你只需要 Windows 10/11、WPS Office 2019 及以上、Python 3.10+ 和 pywin32,两条命令即可完成安装。 整个过程不涉及编译、不依赖复杂的环境变量配置。
环境要求
| 组件 | 要求 | 说明 |
|---|---|---|
| 操作系统 | Windows 10 / 11 | COM 接口是 Windows 专有技术,不支持 macOS 或 Linux |
| WPS Office | 2019 及以上 | 家庭和学生版、专业版均可 |
| Python | 3.10 及以上 | 类型注解等语法特性需要 |
| pywin32 | pip install pywin32 | Python 调用 COM 接口的桥梁 |
这里有一个关键点需要理解:这个工具不是模拟文件格式,而是操控真实的 WPS 程序。 它的渲染效果和手动操作完全一致,因为底层就是 WPS 在执行。这也解释了为什么必须安装 WPS——没有 WPS 进程,COM 接口就没有调用对象。
安装方式
方式一:pip 直接安装(推荐)
pip install git+https://github.com/yb2460/cli-anything-wps.git
这种方式最简洁,一条命令把仓库拉下来并安装到当前 Python 环境。
方式二:克隆后本地安装
git clone https://github.com/yb2460/cli-anything-wps.git
cd cli-anything-wps
pip install -e .
-e 参数以开发模式安装,修改源码后无需重新安装即可生效。适合需要二次开发或调试的场景。
验证安装
cli-anything-wps --help
如果看到命令帮助信息输出,说明安装成功。此时工具已经可以与 WPS 建立通信。
场景说明:假设你是一个团队的技术负责人,需要在 CI/CD 流水线中自动生成周报文档。你只需要在 Windows 构建机器上执行上述安装步骤,后续的流水线脚本就可以直接调用
cli-anything-wps命令,无需人工干预。
WPS 文字操控:从创建文档到导出 PDF 的完整链路
本文欲回答的核心问题:如何用命令行完成 WPS 文字的全部编辑操作?
通过 writer 子命令组,你可以完成文档的创建、段落与标题添加、表格插入、字体格式设置、查找替换,以及导出为 DOCX/PDF/TXT/HTML/RTF/ODT 等六种格式。 整个过程不需要打开 WPS 窗口。
创建与内容编辑
# 新建一个 WPS 文字文档,项目文件保存为 report.json
cli-anything-wps document new --type writer --name "年度报告" -o report.json
# 添加一级标题
cli-anything-wps --project report.json writer add-heading -t "前言" -l 1
# 添加正文段落
cli-anything-wps --project report.json writer add-paragraph -t "这是AI自动生成的报告。"
# 插入一个 3 行 3 列的表格
cli-anything-wps --project report.json writer add-table -r 3 -c 3
这里有几个值得注意的设计细节:
-
--project参数:每个文档操作都通过项目文件串联。report.json记录了文档的状态、会话历史等信息,后续所有操作都指向这个文件。这是 CLI-Anything 架构的核心设计——用 JSON 文件作为”文档句柄”。 -
-l 1表示标题级别:支持多级标题,方便构建文档结构。 -
add-table的-r和-c:直接指定行列数,表格会被插入到当前光标位置。
格式设置与查找替换
writer 模块还支持字体、字号、颜色、粗体、斜体、对齐方式的设置,以及查找替换和页面设置(页眉页脚、页边距等)。这些操作通过 style 命令组和 writer 的子命令配合完成。
多格式导出
# 导出为 Word 格式
cli-anything-wps --project report.json export render report.docx -p docx
# 导出为 PDF
cli-anything-wps --project report.json export render report.pdf -p pdf
导出通过 export render 命令完成,-p 参数指定目标格式。支持 DOCX、PDF、TXT、HTML、RTF、ODT 六种格式。
场景说明:一家公司需要每月将几十份部门报告统一转为 PDF 存档。过去是人工逐一打开、另存为。现在可以写一个简单脚本,遍历目录中的项目文件,批量调用
export render -p pdf,几秒钟完成全部转换。
WPS 表格操控:批量数据写入与公式计算
本文欲回答的核心问题:如何用命令行操控 WPS 表格完成数据操作?
通过 calc 子命令组,你可以管理工作表(添加/删除/重命名)、读写单元格(单个和批量区域)、设置公式、合并单元格,以及执行排序、筛选、条件格式等操作,最终导出为 XLSX/PDF/CSV/HTML 四种格式。
单元格读写
# 新建表格文档
cli-anything-wps document new --type calc --name "数据" -o data.json
# 写入单个单元格
cli-anything-wps --project data.json calc set-cell A1 "产品名"
cli-anything-wps --project data.json calc set-cell A2 "WPS CLI"
# 批量写入区域数据
cli-anything-wps --project data.json calc set-range A3 -d '[["张三",28],["李四",35]]'
set-cell 和 set-range 的区别很直观:前者操作一个格子,后者操作一个矩形区域。set-range 的 -d 参数接收 JSON 格式的二维数组,这在 AI Agent 场景下特别重要——Agent 生成的结构化数据可以直接灌入表格,无需格式转换。
工作表管理
# 添加新工作表
cli-anything-wps --project data.json calc add-sheet
# 重命名工作表
cli-anything-wps --project data.json calc rename-sheet --index 1 --name "汇总"
# 列出所有工作表
cli-anything-wps --project data.json calc list-sheets
# 删除工作表
cli-anything-wps --project data.json calc remove-sheet --index 2
导出
cli-anything-wps --project data.json export render data.xlsx -p xlsx
场景说明:一个数据分析师每天需要从系统中导出 CSV 数据,按固定模板填入 WPS 表格,加上表头、公式和条件格式后发给管理层。用 cli-anything-wps 可以把这个流程完全自动化:脚本读取 CSV →
set-range批量写入 → 设置公式 →export render -p pdf输出。
图片来源:Unsplash
WPS 演示操控:自动化生成幻灯片
本文欲回答的核心问题:如何用命令行创建和编辑 WPS 演示文稿?
通过 impress 子命令组,你可以管理幻灯片(添加/删除/排序/复制)、编辑标题与正文内容、绘制形状(矩形、圆角矩形、圆形、箭头)、在任意位置放置文本框并设置字体颜色尺寸,最终导出为 PPTX 或 PDF。
创建演示文稿
# 新建演示文档
cli-anything-wps document new --type impress --name "演示" -o slides.json
# 添加一张幻灯片,带标题和正文
cli-anything-wps --project slides.json impress add-slide -t "标题页" -c "正文内容"
# 在第 0 张幻灯片上添加文本框元素
cli-anything-wps --project slides.json impress add-element 0 --type text_box --text "Hello!"
# 导出
cli-anything-wps --project slides.json export render slides.pptx -p pptx
add-element 命令支持多种形状类型:text_box(文本框)、rectangle(矩形)、round_rectangle(圆角矩形)、ellipse(圆形)、arrow(箭头)。每种形状都可以指定位置、尺寸、颜色和字体属性。
场景说明:一家咨询公司每周需要根据相同的数据模板生成客户汇报 PPT。幻灯片的数量、布局、图表位置都是固定的,变的只是数据。用 cli-anything-wps,可以让 AI Agent 根据当周数据自动填充每张幻灯片的文本框内容,然后导出 PPTX 发给客户。
AI Agent 模式:为什么 –json 是整个项目的关键
本文欲回答的核心问题:这个工具怎么和 AI Agent 配合使用?
所有命令都支持 --json 参数,返回结构化的 JSON 数据而非人类可读文本,使 AI Agent 能够直接解析执行结果并决定下一步操作。 这是 cli-anything-wps 区别于普通脚本工具的核心特征。
# 创建文档,返回 JSON 格式的结果
cli-anything-wps --json document new --type writer --name "test"
# 查询当前会话状态,返回结构化数据
cli-anything-wps --json --project test.json session status
没有 --json 时,命令输出是人类友好的文本描述;加上 --json 后,输出变成机器可解析的 JSON 对象。这个设计让 AI Agent 的调用链变得非常干净:
-
Agent 发送 CLI 命令(带 --json) -
工具执行操作,返回 JSON 结果 -
Agent 解析 JSON,判断是否成功、获取文档状态 -
Agent 根据结果决定下一条命令
这种”命令即函数调用”的模式,本质上是一种基于 CLI 的 Function Calling。它不依赖任何特定的 AI 框架或协议,任何能执行系统命令的 Agent 都可以接入。
反思:很多人讨论 AI Agent 操控软件时,第一反应是”屏幕截图 + 鼠标点击”的视觉方案。但 cli-anything-wps 走的是另一条路——直接调用软件的编程接口。这两条路不是替代关系,而是互补关系。有接口的软件用 CLI 直连,没有接口的软件才需要视觉方案。后者慢、贵、不稳定,前者快、便宜、可靠。
交互式 REPL 与会话管理:人机协作的中间地带
本文欲回答的核心问题:除了脚本和 Agent,人能不能直接用?
可以。不传任何参数直接运行 cli-anything-wps,会进入交互式 REPL 模式,你可以在里面逐条输入命令、即时看到结果,同时享受撤销/重做和会话持久化的能力。
REPL 模式
cli-anything-wps
进入后,你可以像使用 Python 解释器一样,逐行输入命令。这适合探索性操作——不确定某个命令的效果时,先在 REPL 里试一下,确认无误后再写进脚本。
会话管理
会话管理的三个核心能力:
| 命令 | 功能 |
|---|---|
session status |
查看当前会话状态 |
session undo |
撤销上一步操作 |
session redo |
重做已撤销的操作 |
session history |
查看操作历史 |
最多支持 50 步撤销/重做历史。 这个数字对于大多数文档编辑场景足够了。会话状态持久化在项目 JSON 文件中,即使关闭终端再重新打开,只要指定同一个 --project 文件,就可以继续之前的工作。
场景说明:你在 REPL 里编辑一份文档,连续添加了 20 段内容,然后发现第 8 段写错了。不需要全部重来,直接
session undo回退到第 7 步之后的状态,修改后继续。这种体验和直接在 WPS 界面里按 Ctrl+Z 几乎一样,但你完全没有打开 WPS。
后台静默模式:批量自动化的正确打开方式
本文欲回答的核心问题:怎么让 WPS 在不弹出窗口的情况下执行操作?
通过设置 app.Visible = False,WPS 会在后台静默运行,不弹出任何窗口,适合批量报告生成、格式互转等不需要人机交互的场景。 这意味着你可以在服务器上、在 CI/CD 流水线中、在无人值守的场景下运行这个工具。
后台模式不是通过一个单独的命令行参数开启的,而是在 WPS 后端层(wps_backend.py)中控制 COM 对象的 Visible 属性。当 Visible 设为 False 时,WPS 进程仍然存在(可以在任务管理器中看到),但不会显示任何窗口。
场景说明:一个财务部门每月需要将 200 份 Excel 报表转为 PDF。如果每次转换都弹出 WPS 窗口,不仅慢,还可能因为窗口焦点切换导致其他工作被干扰。后台模式下,200 份报表可以在几分钟内静默完成转换,用户甚至感知不到 WPS 在运行。
图片来源:Unsplash
工作原理拆解:从 CLI 命令到 COM 调用的完整链路
本文欲回答的核心问题:一条 CLI 命令是怎么变成 WPS 里的实际操作的?
命令经过 CLI 层(Click 框架)→ Session 层(撤销/重做/持久化)→ Core 模块(业务逻辑)→ WPS Backend(COM 封装)→ COM 接口 → WPS Office,共六层传递。 每一层职责清晰,互不耦合。
CLI 命令
│
▼
Session 层 —— 撤销/重做/持久化
│
▼
Core 模块 —— writer.py / calc.py / impress.py / export.py
│
▼
WPS Backend (wps_backend.py) —— COM 接口封装
│
▼
COM 接口 —— KWPS / KET / KWPP.Application
│
▼
WPS Office —— 执行实际操作
各层职责
-
CLI 层:基于 Python Click 框架构建,负责解析命令行参数、路由到对应的命令处理函数。47 个命令的定义都在这一层。 -
Session 层:维护操作历史栈,支持撤销/重做。每次操作前记录状态,撤销时恢复到上一个状态快照。 -
Core 模块:按应用分文件—— writer.py处理文字、calc.py处理表格、impress.py处理演示、export.py处理导出。每个文件把 CLI 参数转化为对后端的调用。 -
WPS Backend: wps_backend.py是整个项目的”翻译官”,把 Core 模块的通用调用翻译成 WPS 特定的 COM 调用。 -
COM 接口:Windows COM(Component Object Model)是微软的跨进程通信技术。WPS 通过注册 ProgID 暴露了自己的自动化接口。
三个 COM 入口
| ProgID | 对应应用 | 类比 |
|---|---|---|
KWPS.Application |
WPS 文字 | 类似 Microsoft Word |
KET.Application |
WPS 表格 | 类似 Microsoft Excel |
KWPP.Application |
WPS 演示 | 类似 Microsoft PowerPoint |
这三个 ProgID 是 WPS 在 Windows 系统中注册的 COM 组件标识符。当 wps_backend.py 调用 win32com.client.Dispatch("KWPS.Application") 时,Windows 会启动(或连接到已运行的)WPS 文字进程,并返回一个可编程的对象。
反思:这个六层架构看起来有些”重”,但对于一个要支撑 AI Agent 长时间交互的工具来说,每一层都有存在的理由。Session 层让 Agent 可以试错和回退,Core 层让不同应用的逻辑互不干扰,Backend 层让切换底层应用(WPS vs Office)只需要改一个文件。这种分层不是过度设计,而是应对复杂性的必要手段。
样式管理:统一控制文档外观
本文欲回答的核心问题:怎么批量设置和管理文档的格式样式?
通过 style 子命令组,你可以创建、修改、列出、应用和移除样式,避免对每个段落单独设置格式的繁琐操作。 样式管理是文档自动化的”杠杆点”——定义一次样式,应用到全文,后续修改只需改样式定义。
style create|modify|list|apply|remove
这个命令组与 writer/calc/impress 是平级的,说明样式被视为跨应用的通用能力。在实际使用中,你通常会先创建一套样式(比如”正文””标题1″”标题2″”代码块”),然后在添加内容时通过 style apply 统一应用。
场景说明:一家律所要求所有法律文书使用统一的字体(宋体、小四)、行距(1.5 倍)、标题格式。用 style 命令预先定义好这些样式后,AI Agent 生成的文书自动套用,不需要在每次生成时重复指定格式参数。
与 Microsoft Office 的兼容性:改一行代码的事
本文欲回答的核心问题:如果没有 WPS,只有 Microsoft Office,这个工具还能用吗?
能。WPS 的 COM 接口与 MS Office VBA 高度兼容,只需要把 wps_backend.py 中的三个 ProgID 替换为 Office 对应的标识符即可。 这不是巧合,而是 WPS 主动兼容 Office 自动化生态的结果。
具体来说:
| 原始 ProgID (WPS) | 替换为 |
|---|---|
KWPS.Application |
Word.Application |
KET.Application |
Excel.Application |
KWPP.Application |
PowerPoint.Application |
替换后,工具会通过 COM 接口驱动 Microsoft Office 而非 WPS。由于两者在文档对象模型(DOM)上的高度一致性,大部分命令可以无需修改直接运行。
反思:这个”改一行代码切换后端”的能力,恰恰证明了分层架构的价值。如果 COM 调用散落在 47 个命令的处理函数中,切换后端就是一场灾难。但因为所有 COM 调用都集中在
wps_backend.py一个文件里,切换只需要改这一个文件。这是”依赖倒置”原则在 CLI 工具中的实际体现。
全部命令一览
本文欲回答的核心问题:这个工具一共提供了多少命令,分别做什么?
共 47 个命令,按功能分为文档管理、文字处理、电子表格、演示文稿、样式管理、导出渲染、会话管理和交互模式八大类。 以下是完整的命令树:
cli-anything-wps
├── document new|open|save|info|profiles|json 文档管理
├── writer 文字处理
│ ├── add-paragraph|add-heading|add-list
│ ├── add-table|add-image|add-page-break
│ ├── remove|list|set-text|find-replace
├── calc 电子表格
│ ├── add-sheet|remove-sheet|rename-sheet
│ ├── set-cell|get-cell|set-range|merge-cells
│ └── list-sheets
├── impress 演示文稿
│ ├── add-slide|remove-slide|set-content
│ └── list-slides|add-element
├── style create|modify|list|apply|remove 样式管理
├── export presets|preset-info|render 导出渲染
├── session status|undo|redo|history 会话管理
└── repl 交互模式
几个值得关注的命令:
-
document profiles:列出支持的文档类型配置,帮助你了解当前环境可用的能力。 -
document json:以 JSON 格式输出文档的完整结构信息,对 Agent 理解文档内容非常有用。 -
export presets和export preset-info:列出和查看可用的导出格式预设,在执行export render之前可以先确认支持哪些格式和参数。
实用摘要 / 操作清单
以下是从零开始使用 cli-anything-wps 的完整操作清单:
-
[ ] 确认运行环境为 Windows 10 或 Windows 11 -
[ ] 安装 WPS Office 2019 及以上版本(家庭和学生版或专业版均可) -
[ ] 安装 Python 3.10 及以上版本 -
[ ] 执行 pip install pywin32安装 COM 通信依赖 -
[ ] 执行 pip install git+https://github.com/yb2460/cli-anything-wps.git安装工具 -
[ ] 执行 cli-anything-wps --help验证安装成功 -
[ ] 使用 document new --type writer/calc/impress创建文档 -
[ ] 使用对应的子命令组编辑内容 -
[ ] 使用 export render导出为目标格式 -
[ ] 如需 AI Agent 接入,所有命令加 --json参数 -
[ ] 如需交互式操作,直接运行 cli-anything-wps进入 REPL -
[ ] 如需后台运行,修改 wps_backend.py中Visible属性为False -
[ ] 如需切换到 Microsoft Office,替换 wps_backend.py中的三个 ProgID
一页速览
| 维度 | 内容 |
|---|---|
| 项目名称 | cli-anything-wps |
| 核心功能 | 将 WPS Office COM 接口封装为 47 个 CLI 命令 |
| 基于架构 | CLI-Anything 7 阶段 Harness 方法论 |
| 支持应用 | WPS 文字、WPS 表格、WPS 演示 |
| 命令总数 | 47 个,分 8 大类 |
| 导出格式 | DOCX/PDF/TXT/HTML/RTF/ODT/XLSX/CSV/PPTX |
| AI 适配 | 所有命令支持 --json 结构化输出 |
| 交互模式 | 无参数运行进入 REPL |
| 会话能力 | 持久化 + 50 步撤销/重做 |
| 后台模式 | Visible=False 静默运行 |
| 操作系统 | 仅 Windows(COM 技术限制) |
| Python 版本 | 3.10+ |
| 依赖 | pywin32、WPS Office 2019+ |
| Office 兼容 | 替换 ProgID 即可切换到 Microsoft Office |
| 许可证 | MIT License |
常见问答
Q: 为什么必须安装 WPS 才能使用这个工具?
这个工具通过 COM 接口操控真实的 WPS 程序进程,而不是自己解析或生成文件格式。这意味着它的渲染效果、排版结果与手动操作 WPS 完全一致,但前提是系统中必须有 WPS 可以被调用。
Q: 支持 macOS 或 Linux 吗?
不支持。COM(Component Object Model)是 Windows 专有的跨进程通信技术,macOS 和 Linux 没有这个机制。如果需要在非 Windows 环境中操作文档,可以考虑 CLI-Anything 原生支持的 LibreOffice。
Q: 支持 Microsoft Office 吗?
WPS 的 COM 接口与 MS Office VBA 高度兼容。如果你只有 Microsoft Office 而没有 WPS,把 wps_backend.py 中的 KWPS.Application 替换为 Word.Application,KET.Application 替换为 Excel.Application,KWPP.Application 替换为 PowerPoint.Application 即可。
Q: 能否用于批量自动化任务?
可以。设置 app.Visible = False 后,WPS 会在后台静默运行,不弹出任何窗口。这适合批量报告生成、格式互转、数据填充等无人值守场景。
Q: 撤销/重做支持多少步?
最多 50 步。操作历史持久化在项目 JSON 文件中,关闭终端后重新打开,指定同一个项目文件即可继续。
Q: --json 参数的具体作用是什么?
不加 --json 时,命令输出人类可读的文本描述;加上后,输出变为结构化 JSON 对象,包含操作状态、文档信息等字段,供 AI Agent 或其他程序直接解析。
Q: 如何参与贡献?
可以 Fork 仓库并提交 Pull Request,也可以将 registry_entry.json 提交到 CLI-Anything 官方市场,让更多用户发现这个工具。
Q: 项目使用什么开源协议?
MIT License,允许自由使用、修改和分发。
