この記事はなにがしかのアドベントカレンダーに投稿するつもりだったものです。
なぜ作ったのか
シート数がそれなりに多いエクセルを利用していると「シートタブの視認性・検索性が著しく悪い」という悩みがあった為お勉強も兼ねて解決できないかと思いたちました。
同僚が同様のぼやきをしていたような気もします。
結果どうだったのか
極端に言うとタブを縦に並べた+インクリメンタルサーチをつけただけなのですが結構便利です。
公式で実装してほしいくらい。
社内では私以外にも使いたいという人が現れました。
機能
- ワークシートのタブを縦に並べたカスタムタスクペイン上でワークシートの選択
- シート名でのインクリメンタルサーチ
- ドラッグドロップでのシート順入れ替え
実装について
ソースコードはこちらになります。
https://github.com/nk9k/ExcelVerticalTab
リスト部分
WPFで作ったユーザーコントロールをVSTOでホストしています。
ListBoxItemのスタイルをTabItem風にしてタブ感を演出しました。
ドラッグアンドドロップについては以下の記事を参考にさせていただきました。
WPFでListBoxアイテムのドラッグ&ドロップを実装する。
ListBoxのアイテムを半透明ゴーストつきドラッグアンドドロップで並べ替える
名称変更と通常タブのシート順変更に追従する
VSTOで提供されているオブジェクトモデル上ではシートの名称変更や並び順変更を検知するイベントが存在しません。
どうしたものかと悩んでいたところ親切な先生がサクッとWindowMessageをハンドルするコードを書いてプレゼントしてくれたので助かりました。
感謝っ・・・・!圧倒的感謝っ・・・・!
AirSpace::Notification っていうのを引っ捕らえるといいらしいです。
公開は?
社内ではクリックワンスで配布しているのですが一般向けに配布するにはどういう手段をとればいいのかよくわかっていない為需要がありそうなら本腰入れて調べないとなぁと思っています。つまりバイナリは未公開です。
ビルドできる人はソースコードフォークしてもらえれば早いんですが…
締め
そんなこんなで今年も残りあと僅かとなりました。
1年間いろんな方にお世話になりました。ありがとうございました。
次の1年もまたよろしくお願いします。
皆様よいお年を。