

























1 简书 l2m2博主写的 "C++编写PowerPoint插件" (一) ~(五) https://www.jianshu.com/p/4a5b3076511e
2 https://blog.csdn.net/asd467672767/article/details/51742410
3 https://learn.microsoft.com/en-us/previous-versions/office/developer/office-2010/ee691833(v=office.14)
4 https://learn.microsoft.com/el-gr/openspecs/office_standards/ms-customui/e662c001-3558-4511-a565-07a3e32021e3
5 https://learn.microsoft.com/zh-cn/dotnet/api/microsoft.office.interop.word._application?view=word-pia
6 https://learn.microsoft.com/zh-cn/dotnet/api/microsoft.office.interop.excel._application?view=excel-pia
7 https://blog.csdn.net/ohoneybaby/article/details/129989860
8 https://open.wps.cn/previous/docs/client/wpsLoad
9 https://kdocs.cn/l/c7jl7x76T
vs2022
安装参考网站1进行开发即可, 不过会遇到编译不过的问题, 仔细对比发现vs生成的CConnect中,
OnConnection第二个参数的类型以及OnDisconnection第一个参数的类型是long,
而对应的基类_IDTExtensibility2(在MSADDNDR.tlh文件中)中的对应函数参数类型其实是个枚举值, 将其改为相同的类型后, 即可编译通过
这个说起来很简单, 但是由于微软目前主推c#, 以及js这些开发语言, 所以C++的文档在网上几乎没有, 不过好在手头上有个C#的右键菜单dll, 反编译了一下, 连蒙带猜, 给解决了
就是在上面的"GetCustomUI" 返回一个右键菜单格式的xml就可以了, 例子如下
<?xml version="1.0" encoding="utf-8"?> <customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="OnLoad"> <contextMenus> <contextMenu idMso="ContextMenuTextEdit"> <button id="buttonAssist" label="TEST" insertBeforeMso="Copy" onAction="OnAction" /> </contextMenu> </contextMenus> </customUI>
其他的跟1类似
在参考网站3最下边, 注意, 函数签名里面的"IRibbonControl" 这些派生类须用"IDispatch" 代替, 然后再在实际函数里边强转回去使用, 否则idl文件会编不过, 可能是添加个头文件就可以了, 网上找了一顿, 没有找到
参考网站4 是动态右键菜单回调函数使用说明
在同一个项目里面添加两个ATL对象, 分别返回两个不同的xml, 同时注册表里写两份信息, 就是ppt里会看到两个加载项, 其实是一个dll, 不知道有没有更好的方案
就是项目属性-> 链接器-> 注册输出: 改成"否", 就行了, 图如 参考网站2
在"OnConnection" 函数中, 将第一个参数强转成对应的application对象保存使用
CComPtr<msppt::_Application> app_ =CComQIPtr<msppt::_Application>(Application);
前提是要导入对应的类型库, 以下是网上搜集的, 可能有错误
//MSWORD.OLB //#import "libid:00020905-0000-0000-C000-000000000046" auto_rename auto_search raw_interfaces_only rename_namespace("msword") //MSPPT.OLB #import "libid:91493440-5A91-11CF-8700-00AA0060263B" auto_rename auto_search raw_interfaces_only rename_namespace("msppt")//MSOUTL.OLB //#import "libid:00062FFF-0000-0000-C000-000000000046" auto_rename auto_search raw_interfaces_only rename_namespace("msoutlook") // excel类型库 excel.exe //#import "libid:00020813-0000-0000-C000-000000000046" auto_rename auto_search raw_interfaces_only rename_namespace("msexcel")
参考网站5是word对应的application对象说明文档
6是excel对应的文档
类型库对应的guid可以到HKEY_CLASSES_ROOT\TypeLib目录下查找

注意, 使用guid导入的类型库, 同类型的可以有多个, 如果存在多个则会选用最高版本的对应平台版本, 如果没有则会报错找不到.
比如同时安装office 365, 跟wps, 编译x64版本的插件就会遇到找不到错误, 前几个2.几的都是office安装的, 其中最新的是2.8, 里面有win64版本的mso.dll,
而安装了wps后, wps加了一个63.1的注册表项, 但是只有win32的类型库, 就报错了, 此时处理方案就是把63.1改的比2.8小就行了

7 wps复用office的插件
按照参考网站7, 可以加载, 以及简单使用, 但是跟msppt强相关的比如上面的CComPtr<msppt::_Application> app_就不好用了, 暂不确定是x64版本的wps支持问题还是什么问题
8 wps原生office插件
参考网站8, 里面有个gitee上的例子, 例子的说明里面有个 com插件的例子链接, 下载参考, 发现基本上还是开发一个office插件, 然后用上面7里面的方法使用
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。