【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; }
コメント
【地震】日向灘でM4.4の地震
【#第三次世界大戦】ウクライナ空軍 “ICBM1発がロシア南部から発射された”
司法省 “グーグルはクローム売却を” 裁判所に要求へ 米報道
最近,仕事がずっと激しい...ドロドロドロ
今日は謎の宴会らしい...スーツが入るのかっ!?(GRB爆
「侍ジャパン」宮崎県入り 「プレミア12」向け きょうから合宿
【#総選挙】 衆議院選挙 きょう投票 ...ドロドロドロ(24/10/27)
【#線状降水帯】宮崎 延岡「土砂崩れで家がつぶれている」通報 1人不明(24/10/23)
【冬】お~日本海に筋雲が出ちょる!冬がキター
【#寒冷前線】13時頃30℃の気温が今は25℃無いぞー