ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

ExcelAddIn - VSTO开发的Ribbon插件和用户自定义函数部署问题

2021-05-23 12:36:58  阅读:408  来源: 互联网

标签:插件 AddIn 自定义 dll ExcelAddIn vsto Ribbon 加载


业务需要,开发了个ExcelAddIn:

  • 用VSTO开发的Ribbon界面;
  • 用ExcelDna开发的用户自定义函数;

开发环境:Win10 64位 + Visual Studio 2017社区版 + Office 2016 64位。

问题:ExcelAddIn在开发机器工作正常,但在其它机器部署出现问题,即使环境一样,Ribbon界面始终无法正常显示,自定义函数功能正常。

解决过程:
1)经过反复比较开发机跟部署机上AddIn的区别,首先注意到的一点是,在开发机上AddIn被加载为Com加载项,而在部署机上AddIn被加载为Excel加载项;
2)在网上搜索了一些文档和blog,尝试从Excel里以Com加载的形式加载xxxAddIn.dll和.xll,没有成功,更是收到提示“模块已加载但找不到入口点dllregisterserver”;
3)根据网上的一些blog,尝试使用regsvr32.exe手动注册xxxAddIn.dll,即使以管理员身份执行“regsvr32.exe xxxAddIn.dll”,仍然收到相同的提示“模块已加载但找不到入口点dllregisterserver”;
4)既然在开发机上AddIn可以被注册为Com加载项,说明一定是其它问题,比较可能的是vsto开发的dll的注册方式不一样;
5)在开发机上观察了AddIn加载相关的信息,留意到除AddIn所在的路径外,注册信息不是常见的.dll,而是vsto文件和特别的结尾“vsto|vstolocal”,怀疑这是解决问题的关键;
6)以“vsto|vstolocal”为关键词检索,找到微软的官方文档:https://docs.microsoft.com/zh-cn/visualstudio/vsto/improving-the-performance-of-a-vsto-add-in?view=vs-2019;
7)查看完文档,按照官方文档的提示在注册表加上相应的项:
[HKEY_CURRENT_USER\Software\Microsoft\Office\Excel\Addins\MyAddIn]
"Description"="MyAddIn"
"FriendlyName"="MyAddIn"
"LoadBehavior"=dword:00000003
"Manifest"="file///D:\xxx\xxxx\MyAddIn.vsto|vstolocal"
8)重新打开Excel,Ribbon加载正常,问题初步解决;
9)同时意外发现自定义函数工作不正常,决定按平常一样双击打开xxx64_packed.xll文件,然后自定义函数也工作正常了;
10)关闭Excel并重新打开,Ribbon界面和自定义函数均工作正常。

总结:
1)VSTO开发的Ribbon对象的加载方式跟一般dll不一样;
2)Ribbon和自定义函数事实上是两个不同的东西,是独立加载的,之前一直认为把它们放在一起,加载的时候也是自动一起加载的,理解不对。

标签:插件,AddIn,自定义,dll,ExcelAddIn,vsto,Ribbon,加载
来源: https://www.cnblogs.com/RobZH/p/14791649.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有