首页 > 编程语言 >C# WPS插件开发流程

C# WPS插件开发流程

时间:2023-03-15 11:44:53浏览次数:41  
标签:文件夹 插件 Office C# dll 添加 WPS PowerPoint

源码

教程完整版word和项目源码下载:

https://pan.baidu.com/s/1ufSfrzU5XKlCa9nhyp9tqQ

开发前准备

1. 操作系统

在Win10系统中引用WPS的dll文件可能会受到系统权限限制的问题,可以尝试在Administrator账户中安装WPS Office 2016专业版及进行后续开发。如果使用Win7系统,比较顺利

2. IDE集成开发环境

Microsoft Visual Studio 2017 Community 社区免费版

3. WPS Office 2016

  • WPS Office 2016专业版。专业版无需**也可进行开发,推荐
  • WPS Office 2016个人版。个人版需运行专业版自带的WPSOfficePIA.exe注册程序集后方可正常引用WPS的相关DL

创建项目

1. 启动Visual Studio-文件-新建-项目

WPS插件开发流程(1)

2. 已安装→Visual C#-类库(.NET Framework)→输入名称→选择框架→确定

WPS插件开发流程(1)

生成的新项目如下图

WPS插件开发流程(1)

3. 在解决方案资源管理器中的项目上右键→属性→应用程序→程序集信息

WPS插件开发流程(1)

4. 修改相应信息→勾选“使程序集COM可见”→ 确定

WPS插件开发流程(1)

5. 切换到“生成”→勾选“为COM互操作注册”

WPS插件开发流程(1)

6. 切换到“调试”→勾选“启动外部程序”→浏览→找到WPS安装文件夹中的相应exe程序

WPS插件开发流程(1)

7. 切换到“签名”→勾选“为程序集签名”→新建**文件→输入名称→输入密码(也可不输入)→确定后完成项目属性设置

WPS插件开发流程(1)

(三)添加引用

1. 在项目的“引用”上右键→添加引用

WPS插件开发流程(1)

2. 选中“COM”→勾选“Kingsoft Add-In Designer”

WPS插件开发流程(1)

3. 继续勾选“Upgrade WPS Presentation 3.0 Object Library(Beta)”→确定

提示: Upgrade WPS Office 3.0 Object Library对应的是WPS文字、Upgrade WPS Spreadsheets 3.0 Object Library对应的是WPS表格

WPS插件开发流程(1)

4. 添加上述两个引用后会自动添加以下引用

WPS插件开发流程(1)

提示:若添加后提示引用出错,可以尝试的解决方法有:

 

  • 以Administrator账户登录Windows
  • 以管理员身份运行Visual Studio
  • 在Administrator账户中,以管理员身份安装WPS Office
  • WPS Office个人版需要运行专业版中的 WPSOfficePIA.exe 以注册所引用的程序集
  • 安装WPS Office专业版,安装时WPS会自动注册相关程序集

(四)添加资源文件

1. 在Properties上右键→添加→新建项→找到“资源文件”→输入或保持默认名称→添加

WPS插件开发流程(1)

2. 在打开的Resource1.resx里→添加资源→添加新文本文件→输入名称→添加

WPS插件开发流程(1)

3. 创建文本文件后→在打开的txt里粘贴以下代码

WPS插件开发流程(1)

 
  1.   <customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui">
  2.   <ribbon startFromScratch="false">
  3.   <tabs>
  4.   <tab id="MyTab" label="我的插件" visible="true" insertAfterMso="TabDeveloper">
  5.    
  6.   <group id="Test" label= "组名称">
  7.   <button id="Test" label="Hello" onAction="Test" getImage="GetRibbonImage" size="large"/>
  8.   </group>
  9.   </tab>
  10.   </tabs>
  11.   </ribbon>
  12.   </customUI>
 

说明:

 

  • tabs表示选项卡,id是“MyTab”,显示的名称是“我的插件”,在“开发工具”选项卡之后插入本选项卡
  • group表示选项卡中的组,id是“Test”,名称是“组名称”
  • button表示命令按钮,id是“Test”,名称是“Hello”,回调“Test”事件,从“GetRibbonImage”事件中获取按钮图标,按钮显示大尺寸
  • Id、Label、onAction、getImage引号中的字符可以自定义,且保证唯一性

4. 在Resource1.resx中→添加资源→添加现有文件→选择图标文件

WPS插件开发流程(1)

添加后的图标会显示在Resource1.resx中

WPS插件开发流程(1)

5. 在Resource1.resx中添加相关资源后,在解决方案资源管理器中会自动生成Resources文件夹以及添加好的资源

WPS插件开发流程(1)

提示:直接在项目所在的Resources文件夹中添加资源是不行的,资源文件并没有与项目产生关联,应该在VS中的Resource1.resx中添加

(五)修改主类

1. 点击解决方案资源管理器中默认的Class1.cs→输入自己插件的名称→回车后点”是”

WPS插件开发流程(1)

提示:本文以“MyAddin”这个名称为例

2. 在Using别名区添加相关的引用名称

WPS插件开发流程(1)

 
  1.   using AddInDesignerObjects;
  2.    
  3.   using Office;
  4.    
  5.   using PowerPoint;
 

3. 在public class MyAddin后面添加调用接口

WPS插件开发流程(1)

public class MyAddin : IDTExtensibility2, IRibbonExtensibility

4. 鼠标分别置于 IDTExtensibility2和IRibbonExtensibility上→点击黄色小灯泡→实现接口→VS会自动添加相关事件

WPS插件开发流程(1)

WPS插件开发流程(1)

5. 声明公共静态全局变量app和wpp

WPS插件开发流程(1)

 
  1.   public static PowerPoint.Application app = null;
  2.   public static object wpp;
 

6. 在OnConnection事件中初始化wpp和app

WPS插件开发流程(1)

 
  1.   wpp = Application;
  2.   app = wpp as PowerPoint.Application;
 

7. 在GetCustomUI事件中调用在Resource1.resx中添加的MyRibbon.txt

WPS插件开发流程(1)

return Properties.Resource1.MyRibbon;

提示:调用资源文件时无需添加具体的扩展名

8. 添加GetRibbonImage事件,用于插件获取按钮图标

WPS插件开发流程(1)

 
  1.   public Bitmap GetRibbonImage(IRibbonControl ctrl)
  2.   {
  3.   switch (ctrl.Id)
  4.   {
  5.   case "Test":
  6.   return Properties.Resource1.OKUI_1;
  7.   }
  8.   return null;
  9.   }
 

提示:若要给别的按钮添加图标,在GetRibbonImage事件中补充相关代码。这里的Test是Hello按钮的id,OKUI_1是Resource1.resx中图标的名称

9. 鼠标置于Bitmap上→点击黄色小灯泡→点“Using System.Drawing;”,VS会在顶部的Using别名区自动添加相应的Using别名

WPS插件开发流程(1)

10. 添加Test事件

WPS插件开发流程(1)

 
  1.   public void Test(IRibbonControl ctrl)
  2.   {
  3.   MessageBox.Show("Hello World");
  4.   }
 

提示:MessageBox需要引用System.Windows.Forms。引用方法如下:

(1)在解决方案资源管理器中→在引用上右键→添加引用

WPS插件开发流程(1)

(2)选中程序集→勾选“System.Windows.Forms”→确定

WPS插件开发流程(1)

(3)在Using别名区引用System.Windows.Forms

WPS插件开发流程(1)

using System.Windows.Forms;

(4)波浪线消失,我们可以正常调用消息框了

WPS插件开发流程(1)

最后:其它几个事件可为空,也可根据自己需求添加代码。

(六)添加注册表信息

1. 安装

打开记事本→粘贴以下代码→另存为install.reg→双击install.reg文件安装插件

WPS插件开发流程(1)

 
  1.   Windows Registry Editor Version 5.00
  2.   [HKEY_CURRENT_USERSOFTWAREMicrosoftOfficePowerPointAddinsWPP_test.MyAddin]
  3.   "FriendlyName"="友好名称"
  4.   "Description"="插件描述"
  5.   "LoadBehavior"=dword:00000003
  6.   "CommandLineSafe"=dword:00000001
  7.   [HKEY_CURRENT_USERSoftwareKingsoftOfficeWPPAddinsWL]
  8.   "WPP_test.MyAddin"=""
 

2. 卸载

打开记事本→粘贴以下代码→另存为uninstall.reg→双击uninstall文件卸载插件

WPS插件开发流程(1)

 
  1.   Windows Registry Editor Version 5.00
  2.   [-HKEY_CURRENT_USERSOFTWAREMicrosoftOfficePowerPointAddinsWPP_test.MyAddin]
  3.   [HKEY_CURRENT_USERSoftwareKingsoftOfficeWPPAddinsWL]
  4.   "WPP_test.MyAddin"=-
 

说明:

(1)因为开发的是WPS演示的插件,所以注册表路径分别对应的是PowerPoint和WPP

WPS插件开发流程(1)

需要注意的是,无论电脑中有没有安装Microsoft Office,都应这样写

(2)这里的WPP_test是插件项目的名称,MyAddin是插件主类库的名称

WPS插件开发流程(1)

(3)若开发的是WPS文字、WPS表格的外接程序,则注册路径中:WPS文字对应的是Word和WPS;WPS表格对应的是Excel和ET

(七)运行

1. 点击VS中的启动按钮启动wpp.exe

WPS插件开发流程(1)

2. 切换到“我的插件”选项卡→点击Hello按钮→弹出对话框→插件的基本创建就完成了

WPS插件开发流程(1)

八)生成WPS演示所需的PIA

我参考的原文章:http://www.cnblogs.com/wangqiang3311/p/7206406.html

1. 打开WPS的安装文件夹,找到ksoapi.dll和wppapi.dll,复制到D盘下自己创建的PIA文件夹中,方便后续操作

提示:若需要生成WPS文字或WPS表格的PIA,对应的DLL分别是wpsapi.dl或etapi.dlll

2. 在开始菜单中,打开”VS 2017的开发人员命令提示符”

3. 输入cd “D:\PIA”,进入PIA文件夹中

4. 输入TlbImp ksoapi.dll (注意是tlbimp)后回车,会在PIA文件夹中生成Office.dll。输入TlbImp wppapi.dll 后回车,会在PIA文件夹中生成PowerPoint.dll

5. 这样我们就得到了Office.dll和PowerPoint.dll两个文件

 

(九)强签名

如果要将这两个Dll添加到GAC,还需要进行强签名(若用户是WPS专业版则不需要,为了兼容性,推荐进行强签名)。另外,如果项目中引用了第三方未签名的dll,则必须进行强签名才能引用

1.  输入sn -k test.pfx后回车,生成随机**对

提示:此处的test.pfx可以是任意名称,**文件扩展名也可以是.snk

2. 输入ildasm Office.dll /out:Office.il后回车,采用反汇编工具ildasm生成中间语言。

3. 输入ilasm /dll /res:Office.res /key:test.pfx Office.il /out:Office.dll后回车,采用汇编工具ilasm(注意不要看成ildasm)重新生成dll

4. PowerPoint.dll的强签名操作按照步骤2和3类推,输入以下命令

ildasm PowerPoint.dll /out:PowerPoint.il

ilasm /dll /res:PowerPoint.res /key:test.pfx PowerPoint.il/out:PowerPoint.dll

5. 重新生成dll后提示:Operation completed successfully,说明强签名成功

提示:经过强签名后的dll会覆盖原来未签名的dll

6. 强签名后的Office.dll和PowerPoint.dll

 

(十)部署

1. 将项目调试由Debug改为Release

提示:第一次切换Debug为Release,需要在项目属性中重新设置:生成(为COM互操作注册)、调试(启动外部程序)

2. 点启动按钮后关闭WPP,目的是为了让VS生成Release版的项目dll

3. 在项目上右键,点”在文件资源管理器中打开文件夹”

4. 双击bin文件夹,双击打开Release文件夹,将之前强签名后的dll复制过来

5. 将步骤(六)中创建的安装和卸载注册表文件也复制过来

6. 将NETFX 4.0 Tools文件夹复制过来(该文件夹在项目源码的Release文件夹中有)

7. 在记事本中输入已下代码,另存为”安装.bat”批处理文件

 
  1.   @echo off
  2.    
  3.   @setbaseDir="%cd%"
  4.    
  5.   Echo.
  6.    
  7.   Echo 【1】导入注册表
  8.    
  9.   regedit/s %baseDir%\install.reg
  10.    
  11.   Echo.
  12.    
  13.   Echo 【2】注册类型
  14.    
  15.   C:\Windows\Microsoft.NET\Framework\v4.0.30319\RegAsm%baseDir%\WPP_test.dll /tlb:%baseDir%\WPP_test.tlb
  16.    
  17.   Echo.
  18.    
  19.   Echo 【3】添加程序集到GAC
  20.    
  21.   @SETGACUTIL="%baseDir%\NETFX 4.0 Tools\gacutil.exe"
  22.    
  23.   %GACUTIL%-i %baseDir%\WPP_test.dll
  24.    
  25.   %GACUTIL%-i %baseDir%\PowerPoint.dll
  26.    
  27.   %GACUTIL%-i %baseDir%\Office.dll
  28.    
  29.   pause
 

8. 在记事本中输入以下代码,另存为”卸载.bat”批处理文件

 
  1.   @echo off
  2.    
  3.   @setbaseDir="%cd%"
  4.    
  5.   Echo.
  6.    
  7.   Echo 【1】从缓存中移除程序集
  8.    
  9.   @SETGACUTIL="%baseDir%\NETFX 4.0 Tools\gacutil.exe"
  10.    
  11.   rd /s /QC:\Windows\Microsoft.NET\assembly\GAC_MSIL\WPP_test
  12.    
  13.   rd /s /QC:\Windows\Microsoft.NET\assembly\GAC_MSIL\PowerPoint
  14.    
  15.   rd /s /QC:\Windows\Microsoft.NET\assembly\GAC_MSIL\Office
  16.    
  17.   Echo.
  18.    
  19.   Echo 【2】注销类型
  20.    
  21.   C:\Windows\Microsoft.NET\Framework\v4.0.30319\RegAsm/u %baseDir%\WPP_test.dll /tlb:%baseDir%\WPP_test.tlb
  22.    
  23.   Echo.
  24.    
  25.   Echo 【3】清除注册表
  26.    
  27.   regedit/s %baseDir%\uninstall.reg
  28.    
  29.   pause
 

说明:

(1)%cd%是bat文件当前文件夹路径;RegAsm是程序集注册工具,需要用户先安装Microsoft .Net Framework 4.0;gacutil.exe是全局程序集缓存工具,用户电脑一般没有,所以需要我们将NETFX 4.0 Tools文件夹附带在安装包里

(2)上面的”安装.bat”和”卸载.bat”中均默认注册或移出PowerPoint.dll和Office.dll,如果用户安装了同样也是本文章方法创建的插件,可能会影响其他插件使用。为保险起见,我们可以在”卸载.bat”文件中不要移除C:\Windows\Microsoft.NET\assembly\GAC_MSIL文件夹下的PowerPoint和Office文件夹。即在上方”卸载.bat”代码中去掉下面两句:

rd /s /QC:\Windows\Microsoft.NET\assembly\GAC_MSIL\PowerPoint

rd /s /QC:\Windows\Microsoft.NET\assembly\GAC_MSIL\Office

9. 将Release文件夹整体拷贝出来,打包发给用户。用户安装时,以管理员身份运行”安装.bat”即可

10.  用户安装失败常见原因

(1) 用户未安装Microsoft .Net Framework 4.0

(2) Win7以上系统,用户未以管理员身份运行安装.bat

(3) 安装文件夹所在路径中有空格,需去掉文件夹路径中的空格

注册表未成功添加插件信息,需要用户手动双击”install.reg”添加插件信息到注册表

标签:文件夹,插件,Office,C#,dll,添加,WPS,PowerPoint
From: https://www.cnblogs.com/guangzhiruijie/p/17217942.html

相关文章

  • 解决raw.githubusercontent.com无法访问的问题(picgo+github配置图床图片不显示,但仓库
    解决raw.githubusercontent.com无法访问的问题(picgo+github配置图床图片不显示,但仓库已存储成功)关于如何配置picgo+github图床参考我的这篇文章:https://www.cnblogs.com/r......
  • LeetCode 16. 最接近的三数之和
    classSolution{public:intthreeSumClosest(vector<int>&nums,inttarget){intn=nums.size();pair<int,int>res(INT_MAX,0);//分别存储差......
  • docker-compose一键部署fastdfs6.0.9
    通过docker部署fastdfs版本号:6.0.9目录规划如下:应用目录:/usr/local/fdfs/docker-compose/数据目录:/data/fdfs/docker-compose.yaml示例文件如下version:'3'ser......
  • include转发
    ​ include处理流程:1如果目标资源为Servlet或JSP,就调用他们的相应的service()方法,把该方法产生的响应正文添加到源Servlet的响应结果中;如果目标组件为HTML文档,就直接把......
  • ubuntu上VScode的安装与配置
    1.进入vscode官网:https://code.visualstudio.com/2.右上角点击download,选择ubuntu的.deb安装包进行下载 3.进入下载好的.deb安装包目录下,在该目录下打开终端,输入sudo......
  • LMG3522R030RQSR 650V 30mΩ GaN FET、TPS92667QPHPRQ1 LED矩阵驱动器、UCC21755QDWRQ
    1、LMG3522R030RQSR650V30mΩGaNFET具有集成式驱动器和保护功能,适用于开关模式电源转换器。LMG3522R030集成了一个硅驱动器,可实现高达150V/ns的开关速度。与分立式硅栅......
  • 2023年最新Pycharm免费安装教程
    今天我换了一台新电脑,作为一个Python爱好者,打算安装Pycharm。然而我发现之前使用的Pycharm版本并没有被传承到新电脑上,所以我决定安装最新的版本,即2022.3.3版。我记录了安......
  • include转发
    ​ include处理流程:1如果目标资源为Servlet或JSP,就调用他们的相应的service()方法,把该方法产生的响应正文添加到源Servlet的响应结果中;如果目标组件为HTML文档,就直接把......
  • ArcEngien|实现拖框/圆/多边形放大缩小
    问题分析加载地图文档加载地图文档的过程:先点击“打开”按钮,自动弹出电脑文件夹目录,再从中选取“.mxd”类型的地图文档;选中后点击确定,即可加载;加载时,地图内容显示在Map界......
  • 注册插件:违反了继承安全性规则,派生类型必须与基类型的安全性匹配或低于比基类型的安
    当项目升级到VS2010或者2012后(同时NET版本也升级到4.0),会出现如下错误提示信息:类型“XXX”违反了继承安全性规则。派生类型必须与基类型的安全可访问性匹配或者比基类型......