【C#,Excel-COM】ExcelアドインをC#使って自動登録/解除
関連記事
- 【#VBA】CreateObject(“Scriptlet.TypeLib”).GUIDで「70 書き込みできません」エラー 【2017年08月31日(木)】
- VBAなお仕事中 【2017年06月13日(火)】
- Excel-COM&Outlook-COMな仕事,一山越えた 【2017年05月19日(金)】
- 最近,全力でモノ作り中 【2017年05月19日(金)】
- Excel-VBA なんか慣れた(爆 「リボンへのマクロの自動登録機構」も作りこんだ 【2014年06月25日(水)】
必要に迫られて作ってみたり
Excelアドインの自動登録/自動解除なコードでごわす
基本は,C#経由でExcelを叩く,この記事のコードを理解の上,で(ExcelObjDestroy()メソッドは,参照先に記載があります)
【C#】Excel-COMをレイトバインドして,Excelファイルを保存してみる@ぎんゆぅ~
アドインのフォルダは,システムフォルダ,ユーザーフォルダ2箇所あるそうで
ユーザーフォルダじゃあまり問題は出ないと思いますが
システムフォルダ側(program filesのofficeのフォルダ辺りにありまする)にて登録解除が必要の場合は
ひょっとしたら,UACの権限昇格を適切にやってやらんと,上手く動かないかも?っす
このコードはユーザーフォルダ側で稼働確認してあります
いつものように,バグっていたらスマンこってす
いや,オイラのコードは,微妙にバグる(爆
んにしても,ハラヘタ(昼抜き爆
private bool RegistAddin(string macrofullpath, bool RegistUnregistfl) { bool result = false; object objApp_Late; object objBooks_Late; object objBook_Late; object objAddins_Late; object objAddin_Late; object[] Parameters; try { Type objClassType; objClassType = Type.GetTypeFromProgID("Excel.Application"); objApp_Late = Activator.CreateInstance(objClassType); Parameters = new Object[1]; Parameters[0] = true; objApp_Late.GetType().InvokeMember( "Visible", BindingFlags.SetProperty, null, objApp_Late, Parameters ); //visibleをtrue //Get the workbooks collection. objBooks_Late = objApp_Late.GetType().InvokeMember( "Workbooks", BindingFlags.GetProperty, null, objApp_Late, null ); //ダミーでブックを作らないといけないっぽい? //Add a new workbook. objBook_Late = objBooks_Late.GetType().InvokeMember( "Add", BindingFlags.InvokeMethod, null, objBooks_Late, null ); objAddins_Late = objApp_Late.GetType().InvokeMember( "AddIns", BindingFlags.GetProperty, null, objApp_Late, null ); //addinsコレクション Parameters = new Object[1]; Parameters[0] = macrofullpath; objAddin_Late = objAddins_Late.GetType().InvokeMember( "Add", BindingFlags.InvokeMethod, null, objAddins_Late, Parameters); //addinオブジェクトを追加するアドインファイル名にて生成 Parameters = new Object[1]; Parameters[0] = RegistUnregistfl; //trueで登録 falseで解除 objAddin_Late.GetType().InvokeMember( "Installed", BindingFlags.SetProperty, null, objAddin_Late, Parameters ); //Installed プロパティをtrue //以下順次破棄処理 ExcelObjDestroy(objAddin_Late); objAddin_Late = null; ExcelObjDestroy(objAddins_Late); objAddins_Late = null; Parameters = new Object[1]; Parameters[0] = false; objBook_Late.GetType().InvokeMember("Close", System.Reflection.BindingFlags.InvokeMethod, null, objBook_Late, Parameters); objBooks_Late.GetType().InvokeMember("Close", System.Reflection.BindingFlags.InvokeMethod, null, objBooks_Late, null); objApp_Late.GetType().InvokeMember("Quit", System.Reflection.BindingFlags.InvokeMethod, null, objApp_Late, null); ExcelObjDestroy(objBook_Late); ExcelObjDestroy(objBooks_Late); ExcelObjDestroy(objApp_Late); objBook_Late = null; objBooks_Late = null; objApp_Late = null; result = true; } catch( Exception theException ) { String errorMessage; errorMessage = "Error: "; errorMessage = String.Concat( errorMessage, theException.Message ); errorMessage = String.Concat( errorMessage, " Line: " ); errorMessage = String.Concat( errorMessage, theException.Source ); MessageBox.Show( errorMessage, "Error" ); } return result; }
コメント
九州自動車道 トンネル内で大型トレーラーから出火 人吉~八代間で通行止め(24/7/26)
【#ご到着シリーズ】冷凍かしわ飯&冷凍かしわうどんセットに当選したモルモルモル
【#破局噴火】イエローストーンで大規模な水蒸気爆発が発生
暑すぎてダレてる.なんのやる気も起こらんドロドロドロ
【#Windows #CrowdStrike】セキュリティーソフト世界シェア1位があだ…ウィンドウズ障害、「過去最大規模」の見方も
3連休,らしい.これといって予定はない(爆
【#trump #shooting】トランプ暗殺未遂:トランプ氏 集会で発砲音「前大統領は無事」死者も
【#線状降水帯】九州北部山口県に線状降水帯発生予測情報発令(24/7/13)
【#落雷】今朝の雷,すごかったー 清武城かお隣のマンションに落雷したー共用部の電源落ちてるテレビが映らない!
【#彗星】紫金山アトラス彗星(C/2023 A3)がぶっ壊れた!今秋,見れると思ってたのにピエン