目录

1.下载安装包

2.安装WPS

3.获取示例代码

4.编译示例代码

5.完整示例代码

相关链接


1.下载安装包

去wps的官网 https://www.wps.cn/ 下载linux版本。

下载的安装包名称为:wps-office_12.8.2.21176.AK.preload.sw_amd64.deb, 官网有介绍适用于Ubuntu、麒麟等操作系统。

2.安装WPS

安装的方法有很多,这里采用dpkg 和 apt 来安装。

如果你的麒麟系统是基于 Debian 或 Ubuntu 的,理论上可以直接使用 dpkg 来安装 .deb 文件,但可能需要一些额外的配置或依赖解决步骤。

1.安装 dpkg 和 apt

sudo apt-get install dpkg apt

2.使用 dpkg 安装 .deb 文件

sudo dpkg -i wps-office_12.8.2.21176.AK.preload.sw_amd64.deb

如果安装过程中缺少依赖,可以使用以下命令自动修复依赖:

sudo apt-get -f install

安装完后的路径:

直接在命令行执行:wps

能够启动,就说明安装成功!!!

3.获取示例代码

wps: wps二次开发系统集成相关 - Gitee.com

直接从这个地址下载压缩包或用git拉下来。

4.编译示例代码

源码目录结构如下:
          | -- include   WPS头文件,包含公共以及WPS,ET,WPP各自对应的api接口。
          | -- src          c++源代码文件。
          | -- README.md   帮助文件

 用qtcreator打开如下所示:

编译方法:

在终端中使用cd命令,进入代码的src目录,执行qmake命令。

执行make,在当前目录下会生成wpsDemo。

执行./wpsDemo,运行wpsDemo。

最终效果如图所示:

关键代码:

1.初始化

IKRpcClient * WPSWindow::initWpsApplication()
{IKRpcClient *pWpsRpcClient = NULL;HRESULT hr = createWpsRpcInstance(&pWpsRpcClient);if (hr != S_OK){qDebug() <<"get WpsRpcClient erro";return NULL;}BSTR StrWpsAddress = SysAllocString(__X("/opt/kingsoft/wps-office/office6/wps"));pWpsRpcClient->setProcessPath(StrWpsAddress);SysFreeString(StrWpsAddress);QVector<BSTR> vArgs;vArgs.resize(7);vArgs[0] =  SysAllocString(__X("-shield"));vArgs[1] =  SysAllocString(__X("-multiply"));vArgs[2] =  SysAllocString(__X("-x11embed"));vArgs[3] =  SysAllocString(QString::number(winId()).utf16());vArgs[4] =  SysAllocString(QString::number(width()).utf16());vArgs[5] =  SysAllocString(QString::number(height()).utf16());//-hidentp默认隐藏任务窗格//vArgs[6] =  SysAllocString(__X("-hidentp"));pWpsRpcClient->setProcessArgs(vArgs.size(), vArgs.data());for (int i = 0; i < vArgs.size(); i++){SysFreeString(vArgs.at(i));}m_rpcClient = pWpsRpcClient;return pWpsRpcClient;
}

2.新建文档

void WPSMainWindow::newDoc()
{if (m_spApplication){bool ret = m_spApplication->createDocument("wps");if (!ret){QMessageBox message(QMessageBox::NoIcon, QString::fromUtf8("提示"), QString::fromUtf8("新建失败"));message.exec();}}m_mainArea->setFocus();
}

3.插入表格

void WPSMainWindow::inserttable()
{if (m_spApplication){ks_stdptr<wpsapi::_Document> spActiveDoc;HRESULT hr = m_spApplication->get_ActiveDocument((wpsapi::Document**)&spActiveDoc);if (FAILED(hr)){QMessageBox message(QMessageBox::NoIcon, QString::fromUtf8("提示"), QString::fromUtf8("获取Document对象失败"));message.exec();return;}ks_stdptr<wpsapi::Range> spRange;hr = spActiveDoc->get_Content(&spRange);if (FAILED(hr)){QMessageBox message(QMessageBox::NoIcon, QString::fromUtf8("提示"), QString::fromUtf8("获取Range对象失败"));message.exec();return;}ks_stdptr<wpsapi::Tables> spTables;hr = spActiveDoc->get_Tables(&spTables);if (FAILED(hr)){QMessageBox message(QMessageBox::NoIcon, QString::fromUtf8("提示"), QString::fromUtf8("获取Tables对象失败"));message.exec();return;}long NumRows = 3;long NumColumns = 5;KComVariant DefaultTableBehavior;KComVariant AutoFitBehavior;ks_stdptr<wpsapi::Table> spTable;hr = spTables->Add(spRange, NumRows, NumColumns, &DefaultTableBehavior, &AutoFitBehavior, &spTable);if (FAILED(hr)){QMessageBox message(QMessageBox::NoIcon, QString::fromUtf8("提示"), QString::fromUtf8("添加表格失败"));message.exec();return;}}m_mainArea->setFocus();
}

4.另存为文档

void WPSMainWindow::saveAs()
{if (m_spApplication){QString saveFile = QFileDialog::getSaveFileName((QWidget*)parent(), QString::fromUtf8("保存文档"));if (!saveFile.isEmpty())m_spApplication->saveAs(saveFile);}m_mainArea->setFocus();
}

5.完整示例代码

下面是一个简单的示例代码,展示了如何使用WPS API创建一个新文档,打开一个已存在的文档,并将其保存为新的文件名。

#include <wps_api.h>
int main() {int result;WpsApplication *pApp = NULL;WpsDocument *pDoc = NULL;WpsDocument *pNewDoc = NULL;// 初始化WPS应用程序result = WpsAppInit(&pApp);if(result != WPS_SUCCESS) {printf("初始化WPS应用程序失败!错误代码:%d\n", result);return -1;}// 打开已存在的WPS文档result = WpsOpenDoc(pApp, "/path/to/your/document.wps", &pDoc);if(result != WPS_SUCCESS) {printf("打开文档失败!错误代码:%d\n", result);WpsAppDeinit(pApp);return -1;}// 创建新文档result = WpsCreateDoc(pApp, &pNewDoc);if(result != WPS_SUCCESS) {printf("创建新文档失败!错误代码:%d\n", result);WpsCloseDoc(pDoc);WpsAppDeinit(pApp);return -1;}// 进行文档操作...// 保存新文档result = WpsSaveAs(pNewDoc, "/path/to/your/new_document.wps");if(result != WPS_SUCCESS) {printf("保存文档失败!错误代码:%d\n", result);}// 清理资源WpsCloseDoc(pDoc);WpsCloseDoc(pNewDoc);WpsAppDeinit(pApp);return result == WPS_SUCCESS ? 0 : -1;
}

在上述代码中,首先使用WpsAppInit函数初始化WPS应用程序实例。随后,通过WpsOpenDoc函数尝试打开指定路径的文档。如果成功打开,就会得到一个WpsDocument的指针,该指针将用于接下来对文档的操作。接着,使用WpsCreateDoc函数创建一个新的空白文档实例,然后可以根据需要对新文档进行操作,比如添加文本、格式化等。完成编辑后,使用WpsSaveAs函数保存新文档到指定路径。

相关链接

  • WPS开放平台 : https://open.wps.cn/previous/docs/client/wpsLoad
  • WPS demo下载地址:wps: wps二次开发系统集成相关 - Gitee.com
  • Linux版WPS二次开发接口解析:https://wenku.csdn.net/column/5vo2inon6u

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/87384.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/87384.shtml
英文地址,请注明出处:http://en.pswp.cn/web/87384.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

人工智能之数学基础:如何判断正定矩阵和负定矩阵?

本文重点 正定矩阵和负定矩阵是线性代数中的重要概念,在优化理论、数值分析、统计学等领域有广泛应用。 正定矩阵(负定矩阵) 如上所示,我们可以看到满足上面的性质的时候,我们可以认为矩阵A称为正定矩阵(负定矩阵) 举例: 半正定(半负定) 如果≥或者≤的时候,我们认为矩…

汇编基础介绍——ARMv8指令集(四)

一、CMP 指令 CMP 指令用来比较两个数的大小。在 A64 指令集的实现中&#xff0c;CMP 指令内部调用 SUBS 指令来实现。 1.1、使用立即数的 CMP 指令 使用立即数的 CMP 指令的格式如下。 CMP <Xn|SP>, #<imm>{, <shift>} 上述指令等同于如下指令。 SUBS …

深入剖析 Electron 性能瓶颈及优化策略

Electron 是一个流行的跨平台桌面应用开发框架&#xff0c;基于 Chromium 和 Node.js&#xff0c;使得开发者可以使用 Web 技术&#xff08;HTML、CSS、JavaScript&#xff09;构建跨平台的桌面应用。许多知名应用如 VS Code、Slack、Discord 和 Figma 都采用了 Electron。然而…

Qt的前端和后端过于耦合(0/7)

最近在写一个软件&#xff0c;这个软件稍微复杂一些&#xff0c;界面大概需要十几个&#xff0c;后端也是要开多线程读各种传感器数据。然后鼠鼠我呀就发现一个致命的问题&#xff0c;那就是前端要求的控件太多了&#xff0c;点一下就需要通知后端&#xff0c;即调用后端的函数…

碰一碰发视频源码搭建定制化开发:支持OEM

在移动互联网与物联网深度融合的当下&#xff0c;“碰一碰发视频” 作为一种创新的信息交互方式&#xff0c;正逐渐应用于营销推广、产品展示、社交互动等多个领域。其核心在于通过近场通信技术&#xff08;如 NFC、蓝牙&#xff09;实现设备间的快速连接&#xff0c;无需复杂操…

机器学习文本特征提取:CountVectorizer与TfidfVectorizer详解

一、文本特征提取概述 在自然语言处理&#xff08;NLP&#xff09;和文本挖掘任务中&#xff0c;文本特征提取是将原始文本数据转换为机器学习模型可以理解的数值特征的关键步骤。scikit-learn提供了两种常用的文本特征提取方法&#xff1a;CountVectorizer&#xff08;词频统…

【PHP】.Hyperf 框架-collection 集合数据(内置函数归纳-实用版)

&#x1f4cc; Article::query()->where(article_id, 6)->select()->first()✍️ 进行数据结果的循环&#xff0c;遍历 1.each() 方法遍历集合中的项目并将每个项目传递给闭包&#xff0c;进行处理数据 Article::query()->get()->each(function ($item) {// 可…

巨兽的阴影:大型语言模型的挑战与伦理深渊

当GPT-4这样的庞然大物能够流畅对话、撰写诗歌、编写代码、解析图像&#xff0c;甚至在某些测试中媲美人类专家时&#xff0c;大型语言模型&#xff08;LLM&#xff09;仿佛成为了无所不能的“智能神谕”。然而&#xff0c;在这令人目眩的成就之下&#xff0c;潜藏着复杂而严峻…

vue根据链接生成二维码 qrcode

vue根据链接生成二维码 qrcode js 需求&#xff1a;后端返回一个完整链接&#xff0c;前端根据链接生成一个二维码 1、安装qrcode插件 npm install qrcode2、引入qrcode,并且使用完整代码 <template> <div><img :src"qrcodeData" class"qrcode…

C# 事件(源代码组件概览)

源代码组件概览 需要在事件中使用的代码有5部分&#xff0c;如图15-4所示&#xff0c;后文会依次进行介绍。这些组件如下 所示 委托类型声明事件和事件处理程序必须有共同的签名和返回类型&#xff0c;它们通过委托类型 进行描述。事件处理程序声明订阅者类中会在事件触发时执…

音视频会议服务搭建(设计方案-数据库sql)-02

前言 衔接上篇文章&#xff0c;这篇是相关的表结构sql语句记录 EchoMeet 会议系统数据库表结构设计 &#x1f4cb; 设计概述 本文档定义了EchoMeet音视频会议系统的完整数据库表结构&#xff0c;采用微服务架构设计&#xff0c;支持高并发、可扩展的会议场景。 &#x1f3af…

MCPA2APPT 智能化演示文稿系统:A2A、MCP、ADK 三大架构全流程自动化

&#x1f680; 项目名称 MCPA2APPT / MultiAgentPPT —— 一站式 A2A MCP ADK 多智能体并发 PPT 生成解决方案 MCPA2APPT 是一款开源 AI PPT 创作神器&#xff0c;基于 A2A&#xff08;Ask-to-Answer&#xff09;、MCP&#xff08;Multi-agent Control Protocol&#xff09;和…

pyinstall打包mysql-connector-python后运行报错的问题!

简单的测试代码 # main.py import mysql.connectorDB_HOSTlocalhost DB_PORT3306 DB_NAMElover DB_USERroot DB_PASSWORDxxxx# 连接数据库 connection mysql.connector.connect(hostDB_HOST,portDB_PORT,databaseDB_NAME,userDB_USER,passwordDB_PASSWORD)if connection.is_c…

应对高并发:淘宝商品评论实时数据 API 高效接入开发实践

在电商平台的运营中&#xff0c;商品评论数据是用户决策、商家优化及平台运营的重要依据。淘宝作为国内领先的电商平台&#xff0c;其商品评论数据具有实时性强、数据量大、并发访问频繁等特点。本文将围绕淘宝商品评论实时数据 API 的高效接入展开&#xff0c;探讨在高并发场景…

踩坑日记:虚拟机桥接模式无法连接网卡

对于一名网安学生&#xff0c;我们渗透测试一般是需要虚拟机使用桥接模式。 但是vm直接设置成桥接模式并不能上网。还要进行如下配置 改一下这个桥接的地方。改成我们主机的网卡。 如何查看主机网卡呢&#xff1f; 设置搜索网络

Android 系统默认的Launcher3,Android 系统的导航栏(通常是屏幕底部)显示的 4 个快捷应用图标,如何替换这4个应用图标为客户想要的。

Android 系统默认的Launcher3, Android 系统的导航栏(通常是屏幕底部)显示的 4 个快捷应用图标, 如何替换这4个应用图标为客户想要的。 开发云 - 一站式云服务平台 按如下方式可以修改应用图标。 diff --git a/packages/apps/Launcher3/res/xml/default_workspace_5x6_no_a…

maker-pdf 文档文字识别,并用python实现

下面我将详细讲解maker-pdf文档文字识别的技术原理、特点&#xff0c;并提供完整的Python实现代码及优化方案。内容结合最新文档和OCR技术实践&#xff0c;适合开发者直接集成到项目中。 一、maker-pdf 核心技术解析 maker-pdf是基于深度学习的端到端OCR工具链&#xff0c;专…

Go基础(Gin)

go mod init my-gin-app 初始化一个 Go 项目&#xff0c;创建一个go.mod文件go mod tidy 自动整理项目依赖&#xff0c;确保go.mod和go.sum文件与代码实际使用的依赖一致go mod init&#xff1a;创建项目的 “依赖说明书”。go mod tidy&#xff1a;整理 “说…

21、鸿蒙学习——使用App Linking实现应用间跳转

简介 使用App Linking进行跳转时&#xff0c;系统会根据接口传入的uri信息&#xff08;HTTPS链接&#xff09;将用户引导至目标应用中的特定内容&#xff0c;无论应用是否已安装&#xff0c;用户都可以访问到链接对应的内容&#xff0c;跳转体验相比Deep Linking方式更加顺畅。…

Cursor无限邮箱续费方法

1.注册无限邮箱2925 2.“其他邮箱” 3.点击左下角添加邮箱 4.管理员身份运行Windos PowerShell 5.输入该指令并运行&#xff0c;修改机器码 irm https://aizaozao.com/accelerate.php/https://raw.githubusercontent.com/yuaotian/go-cursor-help/refs/heads/master/scripts/…