技术标签: com加载项没反应 ppt wps
为了还原一个干净无侵扰的网络世界,本文将不进行大规模地分发,若您觉得此文有用,不妨小范围地分享到真正有需要的人手中
功能概述
修复ExcelCom加载项常见问题,如每次需重新勾选COM加载项或COM加载项被列入禁用清单中不用使用,同时也提供让WPS计用COM加载项的方法
使用场景
因用户在使用COM技术开发的加载项过程中,难免各种意外操作,致使加载项处理非活动状态或失效状态,虽然可以通过界面的方式去解决,但步骤偏多,对普通用户来说,较难以去理解及操作,将其封装成一个exe文件,让用户自行双击运行解决是个不错的解决方案,本篇代码也是为这个功能场景而开发的。
技术原理
其实COM加载项的活动与否、禁用与否,都会在注册表上写上相关信息,只需从注册表层面对用户电脑的注册表项进行修改,即可实现非Excel界面操作的方式实现自动化修复插件。
WPS调用COM加载项原理,也只是在注册表上新增几个条目,让WPS可以通过查找注册表,找到COM加载项所在位置并调用它。
详细代码using Microsoft.Win32;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace 插件修复程序
{
class Program
{
private static string addinsKeyWords = "Excel催化剂";//可以模糊查找注册表里含此关键字的条目
static void Main(string[] args)
{
ExcelRepair();
Console.WriteLine("修复完成,请按任意键退出!");
Console.ReadKey();
}
private static void ExcelRepair()
{
//TODO:检查禁用项
CheckDisalbledItem();
//TODO:检查Addin注册表
CheckRegister();
//增加WPS可识别VSTO插件的方法,具体需要看真正安装后的注册表路径及项目名称是什么而定。
LetWPSRunAddins();
}
private static void CheckDisalbledItem()
{
string keypath = @"Software\\Microsoft\\Office"; //\\15.0\\Excel\\Resiliency\\DisabledItems
RegistryKey key = Registry.CurrentUser.OpenSubKey(keypath, true);
FindAndDeleteDisabledItems(key, "DisabledItems", addinsKeyWords);
}
public static void CheckRegister()
{
RegistryKey key = Registry.CurrentUser;
RegistryKey addins = key.OpenSubKey(@"Software\\Microsoft\\Office\\Excel\\Addins", true);
foreach (var item in addins.GetSubKeyNames())
{
if (item.ToUpper().Contains(addinsKeyWords.ToUpper()))
{
var addin = addins.OpenSubKey(item, true);
addin.SetValue("LoadBehavior", "3", RegistryValueKind.DWord);//将启动方式改为3,即Excel打开时立即运行插件
}
}
}
private static void LetWPSRunAddins()
{
RegistryKey key = Registry.CurrentUser;
RegistryKey addins = key.OpenSubKey(@"Software\\Microsoft\\Office\\Excel\\Addins", true);
var wps = key.CreateSubKey(@"Software\\Kingsoft\\Office\\ET\\AddinsWL");
wps.SetValue("Excel催化剂工作室.Excel催化剂", "Excel催化剂工作室.Excel催化剂", RegistryValueKind.String);
wps.SetValue("Excel催化剂", "Excel催化剂", RegistryValueKind.String);
wps.SetValue("Excel催化剂工作室.Excel催化剂离线版", "Excel催化剂工作室.Excel催化剂离线版", RegistryValueKind.String);
}
/// <summary>
/// 查找指定项指定内容
/// </summary>
/// <param name="key"></param>
/// <param name="subkeyname">这里是禁用项的名称</param>
/// <param name="deleteStr">自己插件的名称</param>
private static void FindAndDeleteDisabledItems(RegistryKey key, string subkeyname, string deleteStr)
{
if (key.Name.Contains(subkeyname))
{
for (int i = 0; i < key.ValueCount; i++)
{
try
{
foreach (var item in key.GetValueNames().Where(s => Encoding.Unicode.GetString((byte[])key.GetValue(s)).ToUpper().Contains(deleteStr.ToUpper())))
{
key.DeleteValue(item);
}
}
catch (Exception ex)
{
continue;
}
}
return;
}
if (key.SubKeyCount > 0)
{
foreach (var item in key.GetSubKeyNames())
{
try
{
FindAndDeleteDisabledItems(key.OpenSubKey(item, true), subkeyname, deleteStr);
}
catch (Exception ex)
{
continue;
}
}
}
}
}
}
开源地址为:https://github.com/minren118/ExcelUdfByExcelCuiHuaJi,不妨对您有帮助时帮忙在GtiHub上点个赞。
登录Github后点击红框给个星星
文章浏览阅读4.2w次,点赞329次,收藏2.7k次。Python 入门的60个基础练习_练习python基础语法
文章浏览阅读1w次。用Xcode5运行一下应用,第一个看到的就是status bar的变化。在iOS6中,status bar是系统在处理,应用_ios7 statusbar
文章浏览阅读2.1k次。问题描述:,在gdb调试程序输出变量:p var,会提示No symbol "var" in current context.原因:程序编译时开启了优化选项,那么在用GDB调试被优化过的程序时,可能会发生某些变量不能访问,或是取值错误码的情况。这个是很正常的,因为优化程序会删改程序,整理程序的语句顺序,剔除一些无意义的变量等,所以在GDB调试这种程序时,运行时的指令和你所编写指_no registers调试显示
文章浏览阅读3.4k次。import java.util.Random;import org.drools.util.UUIDGenerator;/** * * * 类名称:GenerateIdUtil * 类描述: 主键生成工具类 * @author chenly * 创建时间:Jul 10, 2012 8:10:43 AM * 修改人: * 修改时间:Jul 10, 2012 8..._idgeneratorutils.generateid()
文章浏览阅读5k次。BX:跳转到寄存器reg给出的目的地址处,如:BX R2BLX:跳转到寄存区reg给出的目的地址处并将返回地址存储到LR(R14)使用这两个指令时有一点特别需要注意:跳转的目的地址必须是奇数,若不是奇数则在后面加1,如某函数的起始地址是0x80000f00,则要跳转到此函数则应该跳转到0x80000f01处!否则会进入硬件错误中断!..._汇编blx
文章浏览阅读2.6k次,点赞2次,收藏4次。vue打包后,其实就剩index.html和一堆静态资源,页面的加载和替换都是通过刷新index.html种的dom来实现的(应该是这样,可能表述不是很好),所以做个重定向就可以了。(博主是这么解决的,网上还有很多人是各种路径错误,大家可以尝试下自己是哪个原因)import org.springframework.boot.web.server.ConfigurableWebServerFa..._前端项目放入resource
文章浏览阅读9.7k次。1.问题展示2.解决方案1.任意窗口, 打开git bash2.命令行界面, 输入cd C:3.cat ~/.ssh/id_rsa.pub正常下面应该显示一大串公钥如果没有,显示如下图, 则进行下一步, 创建公钥4.创建公钥, 输入 ssh-keygen5.然后一直下一步, 直到出现6.再次输入cat ~/.ssh/id_rsa.pub下面一大串数字便是公钥,复制这些字符串, 打开github, 点击头像, 打开settings, 打开SSH and GPG Keys_cmd warning: permanently added
文章浏览阅读154次。[code="java"]1. SQL/Plus 常用命令 a. help [topic] 查看命令的使用方法,topic表示需要查看的命令名称。 如: help desc; b. host 该命令可以从SQL*Plus环境切换到操作系统环境,以便执行操作系统命名。 c. host [command] 在sql*plus环境中执行操作系统命令,如:host notepad.exe..._sql+plus的使用方法
文章浏览阅读441次。该文档均来自互联网,如果侵犯了您的个人权益,请联系我们将立即删除!**学校毕 业 论 文**学校园网络服务器的配置与管理姓 名: **学 号: **指导老师:系 名:专 业: 计算机网络技术班 级:二0一一年十二月十五日摘 要随着网络技术的不断发展和Internet的日益普及,许多学校都建立了校园网络并投入使用,这无疑对加快信息处理,提高工作效..._服务器配置与应用论文
文章浏览阅读1k次。一、单实例多库:一个mysql实例,创建多个数据目录。规划:实例路径:/usr/local/mysql数据目录路径:(1)/usr/local/mysql/data(2)/usr/local/mysql/data2步骤:安装mysql。配置my.cnf文件。初始化各个数据库。用mysqld_multi启动。1、安装mysql。平常安装。2、m..._数据库单实例和多实例
文章浏览阅读6.3k次。今天装了第三方的MFC软件库Xtreme ToolkitPro v15.0.1,听说搞MFC的人都知道它的强大,我刚学习,所以装了一个,然后想运行一下它自带的例子看看。出现一个“找不到mfc90.dll“的问题,百度一下,记录如下:vs2008已经打过sp1补丁,编译C++程序会提示找不到mfc90.dll文件的错误,但是如果是release版的话就能正常运行csdn看到解决方案,粘贴_microsoft v90.debugmfc
文章浏览阅读2.1k次。以前使用CJK进行中文的排版,需要自己生成字体库,近日,出现了XeTeX,可以比较好的解决中文字体问题,不需要额外生成LaTeX字体库,直接使用计算机系统里的字体,本文以在Linux下为例说明XeTeX的使用。操作系统: UbuntuTeX:除了texlive包外,还需要安装的包是texlive-xetex。字体:可以使用fc-list查看你自己的字体库,注意字体的完整名称,在XeTe..._latex 中文排版 texlive