【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/9/6)
奄美大島のマングース 環境省が根絶宣言
生ぬるい西風が吹いてるのぉ.大陸気団の南下はまだかっ!
【#台風】台風10号:台風に関する特別警報 発令予告が出た!鹿児島,宮崎(24/8/28)
【#台風】#台風10号:屋久島に線状降水帯が発生(24/8/28)
【#台風】養生テープ貼った(2年ぶり3回め)柿ピーも買ってきた!
今日も体調が悪いの.暑くないのに汗が酷い
【#台風】台風10号発達予想が増えてきたの.紀伊水道890hPaでの直撃予想まで出てるヤバス(24/8/22)