編ですが一回きりです
VSTO、今までワークシートでしか遊んでこなかったのでここらでがっつりアドインでも作ろうかと思ったので作ってました
というかExcelでGroupByできない気がしたので作りました
まあ作ったものの内容は置いといて
いつもの通りVSTOという厄介なやつと戦うことになった私ですが今回は今までと同様にひどい戦いでした
とりあえず普通にTips的なのを書いていきましょう
まずリボン拡張ですでにあるリボンのタブの中にボタンを入れる方法ですがリボン(ビジュアルデザイナー)を追加したときに最初に追加されるタブのControlIdを目的のタブのControlIdにします。
今回はデータが目的だったのでTabDataを指定しました。他のタブはあの仕様書.xlsxをご覧ください
次にボタンですがグループで固めないとだめ?なのかわかりませんけどボタン単体は入らなかったのでグループでAfterOfficeIdを指定し目的のグループのOfficeIdを指定しました
まあその辺りわからないので適当に
次にLINQをまともに扱うのは嫌だったのでCodeProviderを使用。
リフレクションとかその辺は割と調べ足りなかったのでそこまで苦戦はしないのですが…
そうです、VSTOランタイムとアドインのアセンブリ参照が一番厄介です
VSTOのランタイムはそもそも入ってない可能性が高いうえにどこに入ってるのか怪しいのとさらには絶対参照なのでどうにもならない気がします
またアセンブリの方を参照はまだなんとかなるかなーと。
http://support.microsoft.com/kb/291392にある通りCOMアドインはレジストリに位置が保存されます。
これを拾ってきて文字列からゴミを消せばディレクトリ参照は可能です
VBだと次のような感じ
Microsoft.Win32.Registry.CurrentUser.OpenSubKey("Software\Microsoft\Office\Excel\Addins\プロジェクト名").GetValue("Manifest").ToString().Replace("file:///", "").Replace("/プロジェクト名.vsto|vstolocal", "")
名前は適当に置き換えてください
まさかこれに一日かかるとは…
もっと早く書けるようになりたいですね
こうして私のExcelはVB.NETとC#による謎実行が可能に…! って思ったら型推論壊れててIEnumerableに丸めるときにObjectになっててまだ先は長そう
とりあえずこの辺で