Excel帳票を出力するのにSpreadsheetgearというライブラリを使用している。
大量データでもセルへの出力が早いのが最大の特徴だが、テキストボックスやリストボックスなどのコントロールについてはVBAで使用するOleObjectが使用できない。
Shapeの拡張のようなかたちでの独自のコントロールはあるけれども、フォントサイズの変え方がわからず、その部分は今回VBAを組むことに。
テンプレートを使用して帳票作成するのだけど、最初はそのテンプレートにコントロールを貼り付けたものを、C#側からデータ読み込み&貼り付けして保存するようにしたんだけど、作成されたExcelブックをみると、なぜかコントロールが消えてしまう。


(xUnitをつかってテストは書いてないけど、VBAでも普通にクラスを使ってオブジェクト指向でプログラムをかけることを実感した。)


ただ、VBAをつかったので今までNUnitで動いていたテストが通らなくなってしまって、テストを通す為にはassertの前にVBAマクロを実行する必要があり、Microsoft.Office.Interop.Excel このへんのライブラリを使って、マクロを実行したんだけど、NUnitテストケースから呼び出したときは、なぜかVBAで動的に作成したOleObjectが保存されないという現象が。
ドロップダウンリストを設定してボタンクリックでいろいろ集計処理などを走らせてその結果のセルの値をチェックするようなテストなので、セルの値が問題なければテスト自体は通るんだけど、保存されたブックをみると、ドロップダウンとボタンが消えている。


普通にWorkbook.Openで動いたものは問題ないので、とりあえず放置。
今日はSpreadsheetgearとVBAではまってしまった。。。


たぶんこの辺でいってるようなことなんだろうけど実害もないのでちゃんと見てません。
http://msdn.microsoft.com/ja-jp/library/x97a5x3s.aspx