WPS Office RPC的Python绑定

pywpsrpc的Python项目详细描述


pywpsrpc

Build StatusPyPI versionPython versionLicense: MIT

WPS Office for Linux二次开发C++接口Python绑定.

Read this in other languages: English

WPS Office二次开发接口

WPS二次开发接口允许开发者通过给定的接口来调起WPS并执行指定的任务, 比如你可以打开、编辑然后保存文档,转换文档格式等文档自动化操作,又或者将WPS嵌入到自己的程序、进行功能扩展等。

C++ SDK头文件拷贝自wps_cpp,且无任何修改:

Copyright @ 2012-2019, Kingsoft office,All rights reserved.

关于详细的接口文档,可参考WPS官方的开发网站https://open.wps.cn/docs/office 或参考VBA官方文档https://docs.microsoft.com/en-us/office/vba/api/overview/

对于pywpsrpc本身的文档,可跳转到wiki查看。

依赖

  • Python 3.5+
  • Qt5 (C++ SDK依赖)
  • WPS Office for Linux 11.1.0.9080+
  • sip 5.0+ (仅编译)
  • qmake (仅编译)
  • g++ (仅编译)
  • 桌面环境(WPS运行需要)

PS,目前WPS整合模式有BUG,非把WPS嵌入到自己进程的场景建议先切换到多组件模式

如何编译

在项目顶层目录下运行终端执行: sip-build

如果需要查看编译相关输出信息,可添加 --verbose 选项

安装

建议通过PyPi安装:

pip install pywpsrpc

如果默认的源太慢,建议自行搜索添加中国pip源

通过源码编译安装:

先打包执行: sip-wheel

打包完成后再通过pip install pywpsrpc-*.whl命令安装

快速上手

# 第一步先import所需模块(rpcxxxapi,xxx为对应项目的名字)# rpcwpsapi模块为WPS文字项目的开发接口# rpcwppapi则是WPS演示的# rpcetapi毫无疑问就是WPS表格的了# 另外还有common模块,为前三者的公共接口模块,通常不能单独使用# 调起WPS必需通过createXXXRpcInstance接口,所以导入它是必需的# 以WPS文字为例frompywpsrpc.rpcwpsapiimport(createWpsRpcInstance,wpsapi)frompywpsrpcimportRpcIter# 这里仅创建RPC实例hr,rpc=createWpsRpcInstance()# 注意:# WPS开发接口的返回值第一个总是HRESULT(无返回值的除外)# 通常不为0的都认为是调用失败(0 == common.S_OK)# 可以使用common模块里的FAILED或者SUCCEEDED去判断# 通过rpc实例调起WPS进程hr,app=rpc.getWpsApplication()# 比如添加一个空白文档hr,doc=app.Documents.Add()# 加点文字selection=app.Selectionselection.InsertAfter("Hello, world")# 将前面插入的"Hello, world"加粗selection.Font.Bold=True# 光标移到末尾selection.EndKey()# 再插入空段selection.InsertParagraph()# 光标移到新段selection.MoveDown()# 再码些文字selection.TypeText("pywpsrpc~")# 使用RpcIter遍历所有段paras=doc.ParagraphsforparainRpcIter(paras):print(para.Range.Text)# 或者通过索引方式foriinrange(0,paras.Count):# 注意:首个元素总是从1开始print(paras[i+1].OutlineLevel)defonDocumentBeforeSave(doc):# 如果想取消当前文档保存,第二个返回值设为Trueprint("onDocumentBeforeSave called for doc: ",doc.Name)# SaveAsUI, CancelreturnTrue,False# 注册文档保存前通知rpc.registerEvent(app,wpsapi.DIID_ApplicationEvents4,"DocumentBeforeSave",onDocumentBeforeSave)# 保存文档, onDocumentBeforeSave会被调用到doc.SaveAs2("test.docx")# 退出WPS进程# 使用wpsapi.wdDoNotSaveChanges来忽略文档改动app.Quit(wpsapi.wdDoNotSaveChanges)

例子

文字文档互转

WPS嵌入第三方进程

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java我能知道文件的哪个条目正在被修改吗?   多线程Java并发线程   java抓取包含多个页面的多个字母标签的网站   为什么if语句不排除Java中的另一个if语句?   Java可序列化哈希映射到ByteArray以创建blob   JavaEclipseLombokBuilder添加新建议   java将文件路径数组转换为文件数组,并计算每个文件的大小   在Java8流中添加大小数   Bouncy Castle 1.46之前版本的java兼容性问题   无法在AWS设备场上运行安卓 Java Appium测试   java为什么不使用mavenwarplugin将键与“WEBINF/classes/METAINF/MANIFEST.MF”合并?   java如何在引用子类的成员时调用super()   找不到java TestFx无头MonoclePlatformFactory   java AbstractMethodError onClientSessionEvent和“缺少控制媒体的权限”   正则表达式如何使用JAVA在字符串的大写字母前插入空格?   我的Spring安全项目中的java BCrypt(Spring安全)   java在我的网站上查看小程序更新时遇到问题   java如何使用schedule方法