C#开发word(wps)插件(com加载项)作为一个web前端开发,不搞点后端的东西玩玩也说不过去。除了常见的node

关于word(wps)插件,要实现的最终效果,无非如下两种:

因为这些基于microsoftoffice的上做的二次开发,必须要基于window系统,参考我微软的技术栈开发。微软的技术主要的无非两种:

两者无所谓好坏,但我个人对vb不太感冒,而且气语法跟java的有点点差异的,因此技术选型选择C#。

建议安装完MicrosoftVisualStudio后以管理员身份运行启动

选中解决方案下的项目---【右键】---【属性】,开始如下设置:

【生成】---勾选【为com互操作注册】

【调试】---选中【启动外部程序】---选择wps安装路径

我这里是wps文字,因此选中后的完成路径是:

C:\ProgramFiles(x86)\Kingsoft\WPSOffice\10.8.0.6370\office6\wps.exe

如果你们是基于wps表格

C:\ProgramFiles(x86)\Kingsoft\WPSOffice\10.8.0.6370\office6\et.exe

wpsppt的话

C:\ProgramFiles(x86)\Kingsoft\WPSOffice\10.8.0.6370\office6\wpp.exe

【签名】--【新建签名】

图中的xx_officialDocument.pfx就是此处下拉框选则【新建】后当场生成的。

至此,新建项目完毕,

UpgradeWPSOffice3.0ObjectLibrary对应的是WPS文字、UpgradeWPSSpreadsheets3.0ObjectLibrary对应的是WPS表格。

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

引用添加完毕后,我们可以看到我们总共依赖了哪些引用

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

打开Resource1.resx后--【添加资源】---【添加新文本文件】---【输入MyRibbon】

这个MyRibbon.txt文件就是一个xml菜单文件,配置你在wps中的菜单的显示

双击MyRibbon.txt后进入编辑,输入如下文本

这里的主类,就是我们一开始把Class1.cs该成了OfficialDocument.cs这个文件。当然你可以命名为其他。

打开了OfficialDocument.cs:文件最上方就是我们引用的类,都写进来

usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingAddInDesignerObjects;usingOffice;usingSystem.Windows.Forms;继续往下写

usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingAddInDesignerObjects;usingOffice;usingSystem.Windows.Forms;//namespace[yourProjectName]视具体情况改成你的项目名namespaceyourProjectName{publicclassClass1:IDTExtensibility2,IRibbonExtensibility{{}}

有红色的波浪线,提示我们有错,不过没关系,鼠标悬浮在上面,点击黄色灯泡图标的下拉箭头---【实现接口】,visualstudio会自动实现其接口。IRibbonExtensibility这个也一样这么操作一下。

得到修复后的代码如下:

usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingAddInDesignerObjects;usingOffice;usingSystem.Windows.Forms;usingSystem;namespaceyourProjectName{publicclassClass1:IDTExtensibility2,IRibbonExtensibility{publicvoidOnConnection(objectApplication,ext_ConnectModeConnectMode,objectAddInInst,refArraycustom){thrownewNotImplementedException();}publicvoidOnDisconnection(ext_DisconnectModeRemoveMode,refArraycustom){thrownewNotImplementedException();}publicvoidOnAddInsUpdate(refArraycustom){thrownewNotImplementedException();}publicvoidOnStartupComplete(refArraycustom){thrownewNotImplementedException();}publicvoidOnBeginShutdown(refArraycustom){thrownewNotImplementedException();}publicstringGetCustomUI(stringRibbonID){thrownewNotImplementedException();}}}在OnConnection事件中初始化app和wordDoc对象

publicclassClass1:IDTExtensibility2,IRibbonExtensibility{publicstaticWord.Applicationapp=null;publicstaticobjectwps;publicstaticWord.DocumentwordDoc;ObjectNothing=System.Reflection.Missing.Value;publicvoidOnConnection(objectApplication,ext_ConnectModeConnectMode,objectAddInInst,refArraycustom){wps=Application;app=wpsasWord.Application;wordDoc=app.Documents.Add(refNothing,refNothing,refNothing,refNothing);//wordDoc=app.ActiveDocument;wordDoc.PageSetup.PaperSize=Word.WdPaperSize.wdPaperA4;wordDoc.PageSetup.TopMargin=app.CentimetersToPoints(3.7f);//37mm,对应104.9磅(1磅约等于0.3572mm)wordDoc.PageSetup.BottomMargin=app.CentimetersToPoints(3.5f);wordDoc.PageSetup.LeftMargin=app.CentimetersToPoints(2.8f);wordDoc.PageSetup.RightMargin=app.CentimetersToPoints(2.7f);}...}在GetCustomUI事件中调用在Resource1.resx中添加的MyRibbon.txt,获取菜单配置文件

publicstringGetCustomUI(stringRibbonID){returnProperties.Resource1.MyRibbon;}添加事件试试。我们在MyRibbon.txt文件中的每一项按钮里面,都有一个onAction,这个就是绑定的事件。需要我们在Class1.cs文件中去实现

publicvoidreduceFontSpace(IRibbonControlctrl){MessageBox.Show("youclickreduceFontSpace")//floatformer=app.Selection.Font.Spacing;//app.Selection.Font.Spacing=former-0.3f;}

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

在第三部中,我们实现了一个自定义的菜单,并期望其加到wps的菜单栏中,具体展示结果如下

怎么样才能展示这个菜单呢?

在【开发工具】---【com加载项】选中我们的实现的com加载项(wps专业版才有【开发工具】这个菜单选项):

新增一个空的txt记事本文件→修改后缀名,另存为install.reg→右键此文件编辑→拷贝如下代码:

WindowsRegistryEditorVersion5.00[HKEY_CURRENT_USER\SOFTWARE\Microsoft\Office\Word\Addins\Zhjk.OfficialDocument]"FriendlyName"="Zhjk.OfficialDocument""Description"="【自定义中文描述方便他人理解】""LoadBehavior"=dword:00000003"CommandLineSafe"=dword:00000001[HKEY_CURRENT_USER\Software\Kingsoft\Office\WPS\AddinsWL]"Zhjk.OfficialDocument"=""需要注意的是:

[HKEY_CURRENT_USER\SOFTWARE\Microsoft\Office\Word\Addins\Zhjk.OfficialDocument]这里[HKEY_CURRENT_USER\SOFTWARE\Microsoft\Office\Word\Addins固定不变,后面的xxx1.xxx2,表示xxx1是你项目的名,xxx2是你cs入口文件的类名,本例中就是yourProjectName.Class1

以上,写入注册表信息install.reg文件完成。

但是,如果你想清理掉这个注册表信息,你可以手动在命令行输入regedt,打开操作界面,你也可以专门生成一个unistall.reg文件,双击实行即可。unistall.reg内容如下:

WindowsRegistryEditorVersion5.00[-HKEY_CURRENT_USER\SOFTWARE\Microsoft\Office\Word\Addins\Zhjk.OfficialDocument][HKEY_CURRENT_USER\Software\Kingsoft\Office\WPS\AddinsWL]"Zhjk.OfficialDocument"=-注意减号(横杠)“-”,还有xxx1.xxx2(本例子中是Zhjk.OfficialDocument)要与你安装的install.reg里面的保持一致。若开发的是WPS文字、WPS表格的外接程序,则注册路径中HKEY_CURRENT_USER\SOFTWARE\Microsoft后面:WPS文字对应的是Word和WPS;WPS表格对应的是Excel和ET

某些电脑可能要用管理权权限来运行这个reg文件

命令行输入regedit

沿着这个HKEY_CURRENT_USER\SOFTWARE\Microsoft\Office\Word\Addins路径一直打开目录,如果看到如下,即说明写入注册表成功

之前做了那么多准备工作,现在可以启动调试,看看我们的wps文字到底有没有按照预定的情况加载自定义菜单。打开visualstudio界面,在degug模式下,点击启动按钮:

然后自动自动wps文字(如果此前你打开了wps文字应用,或者word,请先关掉)

看到此界面,说明我们的自定义com加载项本地调试成功。

部署之前,我们要先对我们的dll签名,保证系统信任此文件

Office.dllVBIDE.dllWord.dll

后面我们需要这三个dll。

若用户是WPS专业版则不需要,为了兼容性,推荐进行强签名。另外,如果项目中引用了第三方未签名的dll,则必须进行强签名才能引用。

ildasmWord.dll/out:Word.ililasm/dll/res:Word.res/key:zhjk.pfxWord.il/out:Word.dll

可以看到强签名后的文件如下:

Word.dll、Office.dll这两个强签名的,就是我们后面需要的文件。

在此前的步骤中,我们拿到了强签名的dll和Release模式下应用生曾的dll,

Zhjk.dllZhjk.pdbZhjk.tlbWord.dllOffice.dll现在开始对window系统进行操作了。

这个文件夹路径

C:\ProgramFiles(x86)\MicrosoftSDKs\Windows\v10.0A\bin

你可以在命令行,一行行输入命令来实现。这里我们推荐用批处理命令。把所有的命令都放在一个xxx.bat文件里。

这里我们的在当前Release目录下新增一个install.bat,里面内容如下:

@echooff@setbaseDir=%~dp0regedit/s%baseDir%\reg\Zhjk.OfficialDocument.regC:\Windows\Microsoft.NET\Framework\v4.0.30319\RegAsm%baseDir%\Zhjk.dll/tlb:%baseDir%\Zhjk.tlb@SETGACUTIL="%baseDir%\NETFX4.8Tools\gacutil.exe"%GACUTIL%-i%baseDir%\Zhjk.dll%GACUTIL%-i%baseDir%\Word.dll%GACUTIL%-i%baseDir%\Office.dllpause同样,再建一个卸载的bat批处理命令文件uninstall.bat:

@echooff@setbaseDir=%~dp0Echo1.从缓存中移除程序集@SETGACUTIL="%baseDir%\NETFX4.8Tools\gacutil.exe"rd/s/QC:\Windows\Microsoft.NET\assembly\GAC_MSIL\Zhjkrd/s/QC:\Windows\Microsoft.NET\assembly\GAC_MSIL\Wordrd/s/QC:\Windows\Microsoft.NET\assembly\GAC_MSIL\OfficeEcho2.注销类型C:\Windows\Microsoft.NET\Framework\v4.0.30319\RegAsm/u%baseDir%\Zhjk.dll/tlb:%baseDir%\Zhjk.tlbEcho.Echo3.清除注册表regedit/s%baseDir%\reg\Zhjk.OfficialDocument-delete.regpause%~dp0是bat文件当前文件夹路径;RegAsm是程序集注册工具,需要用户先安装Microsoft.NetFramework4.0;gacutil.exe是全局程序集缓存工具,用户电脑一般没有,所以需要我们将NETFX4.8Tools文件夹附带在安装包里

THE END
1.签名软件下载电子签名软件手机签名软件下载酷签艺术签名是一款个性化的个性签名app,内含多种流行字体签名选择,可爱风、商务风、个性签名。让你随时随地制作你喜欢的艺术签名。喜欢就赶紧来试用吧!酷签艺术签名简介:酷 签名设计大师 16.02M / 2020-09-22 / v1.6.1 官方安卓版 评分: 下载 签名设计大师是一款完全免费的个性签名工具,内含多种流行字体签名选择http://www.downyi.com/key/qianmingruanjan/
2.SignToolSignTool 是一种命令行工具,可对文件进行数字签名、验证文件中的签名、从文件中删除签名以及时间戳文件。 有关对文件签名为何重要的信息,请参阅代码签名简介。 SignTool 可作为Windows 软件开发工具包 (SDK)的一部分提供。 该工具安装在 Windows SDK 安装路径的\Bin文件夹中,例如:C:\Program Files (x86)\Windowshttps://msdn.microsoft.com/en-us/library/aa387764.aspx
3.AppSingerAPk签名工具C#源代码资源AppSingerAPk签名工具C#源代码 共148个文件 cs:28个 cache:18个 sample:10个 rsa 需积分: 16108 浏览量2017-09-20上传246KBRAR AppSingerAPk签名工具是基于C#编程语言开发的一款实用工具,主要功能是对Android应用(Apk)进行签名操作,同时集成了RSA加密技术,确保应用的安全性。在Android应用发布之前,签名是一个必要https://download.csdn.net/download/liujia_008/9986919
4..net去除强签名工具后端.net去除强签名工具 后端 - C# Au**陌亡上传402KB文件格式exe强签名删除去除 .net去除强签名工具,可以去除强签名 (0)踩踩(0) 所需:1积分 POLYGON - Elven Realm - Low Poly 3D Art by Synty多边形-精灵境界Unity模型包 2024-12-02 05:14:26https://www.coder100.com/index/index/content/id/2402660
5.C#给主程序签名及第三方dll强签名操作法号阿兴C# 给主程序签名及第三方dll强签名操作 1、给主程序添加签名 添加完成后会自动生成一个*.pfx文件。 2、给第三方程序添加强签名方法: 本文以WAPIWrapperCSharp.dll为例,使用vs Tools下的工具命令。 打开命令工具是这个样子, 第一步:生成随机密钥对, 1https://www.cnblogs.com/xuliangxing/p/6708958.html
6.C#程序脱壳,去除强签名由于.net程序的运行机制,利用Reflector,ilspy等反射工具很容易就能看到原代码。很多程序都做了代码混淆,加壳。代码混淆后反编译乱码,不容易理解;加壳使反编译工具不能正常反射,提示无效的程序集。 有些程序还用了强名称程序集 需要做的就是:脱壳、去除强名称、反编译 http://modb.pro/db/180960
7.[已解决]c#签名时出错C# signtool error:no certificates were found that met all the given criteria 错误解决方案 程序运行时报错:signtoolerror:no certificates were found that met all the given criteria (汉译:符号工具错误:没有找到符合所有给定标准的证书)解决方案:打开项目->属性->签名,去掉为ClickOnce清单签名即可。 https://www.pianshen.com/article/9684732267/
8.C#自定义签名章实现方法C#教程这篇文章主要介绍了C#自定义签名章实现方法,涉及C#图形绘制的相关实现技巧,非常具有实用价值,需要的朋友可以参考下GPT4.0+Midjourney绘画+国内大模型 会员永久免费使用!【 如果你想靠AI翻身,你先需要一个靠谱的工具!】 本文实例讲述了C#自定义签名章实现方法。分享给大家供大家参考。具体实现方法如下: 1 2 3 4 5https://www.jb51.net/article/71402.htm
9.C#与Apk二三事Apk反编译回编译签名等相关的工具类这是在ApkIDE中Apk相关的处理命令工具,包括调用apktool反编译apk,调用apktool回编译apk,对生成的apk进行签名,调用Dex2jar对.dex反编译成.class文件,调用jad对.class文件进行反编译等。 usingSystem;usingSystem.Collections.Generic;usingSystem.Text;usingSystem.Diagnostics;usingSystem.IO;usingSystem.Windows.Forms;namehttps://www.jianshu.com/p/5eec7418a9b3
10.顺丰对接java文档顺丰java怎么样json处理工具类直接从自己编写的框架里拿,参考:github.com/neatlife/jf… 签名工具类 顺丰提供了java的签名示例代码 在其基础上修改即可,核心代码如下 public static String sign(String appId, String appSecret, String content) { // 假设原始内容JSON为 {"hello":"kitty"} https://blog.51cto.com/u_16099218/11681431
11..net/c#利用强签名,保护自己dll不会被伪造.Net/C#架构师要对程序集进行强签名,无需使用购买的代码签名数字证书,用.NET提供的sn工具就可以生成snk文件,你只要https://www.itsvse.com/thread-4174-1-1.html
12.使用iText7C#签名pdf腾讯云开发者社区使用iText7 C#签名pdf iText7是一款功能强大的PDF处理库,它提供了丰富的API和工具,可以用于创建、编辑、操作和签名PDF文档。使用iText7 C#签名PDF可以实现对PDF文档进行数字签名,确保文档的完整性和可信性。 数字签名是一种用于验证文档真实性和完整性的技术。通过数字签名,可以确定文档的作者身份,并确保文档在传输或https://cloud.tencent.com/developer/information/%E4%BD%BF%E7%94%A8iText7%20C%23%E7%AD%BE%E5%90%8Dpdf-article
13.RSA因数分解工具yafuC#RSA加密解密工具,可以生成公钥和私钥,可以生成PKCS1公钥,PKCS8私钥。适用于js加密,C#解密,java解密。 上传者:a497785609时间:2022-09-07 rsa因数分解+随机生产公私钥 rsa因数分解+随机生产公私钥 上传者:qq_42707557时间:2021-10-16 RSA签名验签工具windows_V1.4.zip_rsa_rsa2生成签名_rsa签名工具_工具_验签 https://www.iteye.com/resource/dchua123-12320899
14.如何使用C#创建自签名证书?如何使用C#创建自签名证书? 我需要使用C#创建一个自签名证书(用于本地加密 - 它不用于保护通信)。 我已经看到一些使用P / Invoke和Crypt32.dll的实现,但是它们很复杂并且很难更新参数 - 我还想尽可能避免P / Invoke。 我不需要跨平台的东西 - 只在Windows上运行对我来说已经足够了。 理想情况下,结果将是一https://m.imooc.com/mip/wenda/detail/583578
15.c#手写签名打印并上传(asp.net)开发实例源码下载<!--签名区域--> <!--打印区域--> <!--把Jqurey引入到项目中--> <!--把jSignature引入到项目中--> https://www.haolizi.net/example/view_149305.html