##ExcelにSQLやソースコードを書かないといけないことはありませんか?
例えば仕様書とか、APIマニュアルとかで。
ありませんか。そういう時はSphinx使うから大丈夫ですか。うらやましいですね。僕はよくあります。Excel方眼士ですしね。
とりあえずそういうことがあるとして、そういう時はやっぱりちゃんとシンタックスハイライトして欲しいんですよ。真っ黒なのはアレだし、手作業で色変えるのは勘弁ですし。
シンタックスハイライトとリッチテキスト形式でのコピーができるエディタを使って、そっちで書いたものをコピーしてExcelに貼り付けるという手が無くはないんですが、ちょっと修正するのにいちいちエディタを起動して行き来するのは面倒ですし、オートシェイプへの貼り付けはいまいちうまくいきません。
##ということで、Highlighterアドインを作りました
ソースコードはこちらです。
Excel-DNAと、.NET製のシンタックスハイライト用ライブラリColorCodeを利用しています。
エラー処理とか皆無ですが、オートシェイプのテキストに色付ける以外のことはやってないので回復不能にデータ壊したりすることも無いでしょう。
ただし、マクロ全般に言えることですが実行するとUndo情報はクリアされるのでそこのところは注意が必要です。
※ちなみに、Office2007と2010で動くことは確認してますが、それ以外は未確認です。
※こういうの探せばいくらでもありそうなものですが、ざっと検索した感じでは見つけられませんでした。
###セットアップ
-
まずは
Highlighter.dll
をビルドします。C# Express 2010でビルドできます。
ExcelDna.Integration.dll
とColorCode.dll
も同梱してますが、素性のしれないバイナリは使いたくないという人は上記のURLから本家のものをダウンロードしてください。 -
適当なフォルダを作って、以下のファイルをそのフォルダ内に配置します。
- Highlighter.dll
- ExcelDna.Integration.dll
- ColorCode.dll
- Highlighter.dna
- Highlighter.xll
###使い方
※今のところ、Excelのオートシェイプ上に書かれたテキストだけが対象です。
ちょっと直せばセル上のテキストも対象にできますが、個人的にはそっちにはニーズが無いので。
-
Highlighter.xllをダブルクリックすると、Excelが起動してアドインを読み込むかどうか聞かれます。「このセッションに限り~」を選択してください。
-
オートシェイプ上に、コードやSQLを書きます。スタイルに応じてカラーリングを変えるような器用なマネはしていないので、シェイプの背景色は白系で。
-
オートシェイプを選択した状態で、[アドイン] → [Highlighter] で言語を選択すると、シンタックスハイライトが適用されます。
###対象言語の変更
highlighter.dnaをエディタで開いて、この辺を適当に消したり追加したりしてみてください。
[ExcelCommand(MenuText = "VB")] public static void VB() { Highlight(Languages.VbDotNet); }
[ExcelCommand(MenuText = "CSharp")] public static void CSharp() { Highlight(Languages.CSharp); }
[ExcelCommand(MenuText = "Sql")] public static void Sql() { Highlight(Languages.Sql); }
どんな言語が指定可能かは、このへんとかを見ると分かると思います。
それでは。