Excel催化劑開源第3波-修復ExcelCom加載項失效問題及WPS可調用Com加載項的方法


為了還原一個干凈無侵擾的網絡世界,本文將不進行大規模地分發,若您覺得此文有用,不妨小范圍地分享到真正有需要的人手中

功能概述

修復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后點擊紅框給個星星

技術交流QQ群

QQ群名:Excel催化劑開源討論群, QQ群號:788145319


 
Excel催化劑開源討論群二維碼

關於Excel催化劑

Excel催化劑先是一微信公眾號的名稱,后來順其名稱,正式推出了Excel插件,插件將持續性地更新,更新的周期視本人的時間而定爭取一周能夠上線一個大功能模塊。Excel催化劑插件承諾個人用戶永久性免費使用!

Excel催化劑插件使用最新的布署技術,實現一次安裝,日后所有更新自動更新完成,無需重復關注更新動態,手動下載安裝包重新安裝,只需一次安裝即可隨時保持最新版本!

Excel催化劑插件下載鏈接:https://pan.baidu.com/s/1Iz2_NZJ8v7C9eqhNjdnP3Q

 
聯系作者
 
公眾號

取名催化劑,因Excel本身的強大,並非所有人能夠立馬享受到,大部分人還是在被Excel軟件所虐的階段,就是頭腦里很清晰想達到的效果,而且高手們也已經實現出來,就是自己怎么弄都弄不出來,或者更糟的是還不知道Excel能夠做什么而停留在不斷地重復、機械、手工地在做着數據,耗費着無數的青春年華歲月。所以催生了是否可以作為一種媒介,讓廣大的Excel用戶們可以瞬間點燃Excel的爆點,無需苦苦地掙扎地沒日沒夜的技巧學習、高級復雜函數的燒腦,最終走向了從入門到放棄的道路。

最后Excel功能強大,其實還需樹立一個觀點,不是所有事情都要交給Excel去完成,也不是所有事情Excel都是十分勝任的,外面的世界仍然是一個廣闊的世界,Excel只是其中一枚耀眼的明星,還有其他更多同樣精彩強大的技術、工具等。*Excel催化劑也將借力這些其他技術,讓Excel能夠發揮更強大的爆發!

關於Excel催化劑作者

姓名:李偉堅,從事數據分析工作多年(BI方向),一名同樣在路上的學習者。
服務過行業:零售特別是鞋服類的零售行業,電商(淘寶、天貓、京東、唯品會)

技術路線從一名普通用戶,通過Excel軟件的學習,從此走向數據世界,非科班IT專業人士。
歷經重重難關,終於在數據的道路上達到技術平原期,學習眾多的知識不再太吃力,同時也形成了自己的一套數據解決方案(數據采集、數據加工清洗、數據多維建模、數據報表展示等)。

擅長技術領域:Excel等Office家族軟件、VBA&VSTO的二次開發、Sqlserver數據庫技術、Sqlserver的商業智能BI技術、Powerbi技術、雲服務器布署技術等等。

2018年開始職業生涯作了重大調整,從原來的正職工作,轉為自由職業者,暫無固定收入,暫對前面道路不太明朗,苦重新回到正職工作,對Excel催化劑的運營和開發必定受到很大的影響(正職工作時間內不可能維護也不可能隨便把工作時間內的成果公布於外,工作外的時間也十分有限,因已而立之年,家庭責任重大)。

和廣大擁護者一同期盼:Excel催化劑一直能運行下去,我所惠及的群體們能夠給予支持(多留言鼓勵下、轉發下朋友圈推薦、小額打賞下和最重點的可以和所在公司及同行推薦推薦,讓我的技術可以在貴司發揮價值,實現雙贏(初步設想可以數據顧問的方式或一些小型項目開發的方式合作)。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM