|

楼主 |
发表于 2022-5-28 00:34
|
显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
详细说一下这个公式 progId = "Dna." + clsId.ToString("N") + "." + loadedComAddIns.Count;
1. 首先说一下两个固定的字符串 “Dna.”和“.”, 也行很多人像,这个是个常量有啥好说的,确实如此,但要注意的一点就是版本问题,在EXCELDNA1.1.0之前的版本都是用这种表示方法,但之后改成了“Dna_”和“_”,所以为了兼容前后版本,生成的时候要么判断下版本号,要么两个都生成即可。
2. 再说下loadedComAddIns.Count,loadedComAddIns是一个List列表,根据字面意思就知道这是加载的Com插件的数量,Ribbon和CTP使用的是一套生成方案,都是这个公式,但区别就是这个数量,所以在第一个图中的_0和_1分别代表的就是Ribbon和CTP,而“.”代表的是1.1.0版本,"_"代表的是1.1-1.5版本。
3.最后就剩下一个 clsId.ToString("N"),clsid是这么获取到的 clsId = ExcelDnaUtil.XllGuid; 而 XllGuid= GuidFromXllPath(XllPath); 而 GuidFromXllPath(XllPath)是由GuidUtility.Create(_excelDnaNamespaceGuid, path.ToUpperInvariant())这个函数返回的;这个函数的第一参数_excelDnaNamespaceGuid是一个常量{306D016E-CCE8-4861-9DA1-51A27CBE341A},path 是上面传过来的,XllPath=DnaLibrary.XllPath;就这样一层一层的嵌套,反推,变量就一个xllpath,就是一个地址字符串(是ExcelDnaUtil的一个属性,可在代码中直接获取),所以每次xll文件卸载或或地方了,就会触发DNA重新注册ribbon和ctp值。
4.根据上面的步骤,可以封装一个类来完成这些步骤,大体结构如下:
5. 使用时只需在实现IExceladdin接口时,调用注册和反注册二个方法,应该就能兼容WPS个人版了,当然EXCEL也是没问题的。
6. 关键参数和步骤已经全部讲完了,WPS之前没接触过,最近刚好有用到,感觉还不错,个人版还有个JS可以玩,也可以切换到VB,还是32位的,这样对装了office64位的机子正好也是个补充。最后附上WPSReg.cs供参考(c#),使用时在ExcelDNa项目中导入,然后按第5点实现下IExcelAddin接口即可,也可以按自己的实际需求自己实现,附件只是个参考而已。
|
评分
-
3
查看全部评分
-
|