【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;
}

コメント
【#花粉症】目が腫れてキターくしゃみも止まらん.いよいよ花粉もピークか?
【#衆議院選挙2026 】自民 316議席獲得 単独で3分の2超 中道は49議席
【#衆議院選挙2026 】自民単独で過半数大きく上回り300議席に達する可能性
【BW55T】UPSが死んだ...ドロドロドロ😭これは人類滅亡間違いなし!なので発注(爆
広島カープの羽月隆太郎容疑者、「ゾンビたばこ」使用の疑いで逮捕
【#総選挙】衆議院選挙 きょう公示 12日間の選挙戦へ
青森 スノーモービル乗るため入山の約10人と連絡取れず 遭難か
【#不発弾】宮崎市中心部の不発弾 17日に処理 避難指示や交通規制予定(26/1/17)