【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; }
コメント
ついに今日は一日,寝てたげな.金曜から具合悪いのぢゃ
スーパーでのコメの平均価格 5キロ 4285円 前週より値上がり(25/5/26)
ご近所にココイチが出来る,らしい
【梅雨】朝から大雨ぇ~ さすが梅雨じゃ(25/5/17)
今日は城主生誕記念日で日本国は祝日,らしい...
兵庫 城崎温泉 旅館で火事 ほぼ消し止められる
東海道新幹線 停電のため運転見合わせ 区間が拡大 原因調査中
【霧島山】新燃岳:活発化してた火山性地震,ピタッと止まった(25/4/26)
今日は落雷,ひょうに厳重警戒じゃげな(25/4/14)