让 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-cellset-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 的调用链变得非常干净:

  1. Agent 发送 CLI 命令(带 --json
  2. 工具执行操作,返回 JSON 结果
  3. Agent 解析 JSON,判断是否成功、获取文档状态
  4. 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 Backendwps_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 presetsexport 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.pyVisible 属性为 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.ApplicationKET.Application 替换为 Excel.ApplicationKWPP.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,允许自由使用、修改和分发。