個人メモ
開発中のアプリでExcel形式に出力する機能をもっているのですが、それのグラフを書く時にタイトルが表示されていなかったので、これを修正。すでにCOleDispatchDriverでAppliやbook、Worksheet、Chartは導入されていました*1。
Chartディスパッチを見てもタイトルを設定するメソッドがないので、困る。なんかGetChartTitleなるメソッドはあったので、なんでSetがないんだろうと悩む。しかもGetの返り値がLPDISPATCHになっている。文字が返ってくるんじゃないのか、と思ってしばらく悩んだ結果、どうやらChartクラスではなくChartTitleクラスってのがあることを知る。Chartクラスでグラフタイトルに関わるところはせいぜい「タイトル表示のON・OFF」の制御ぐらいで、その中身はまたChartTitleでやってねということでした。
さて、このChartTitleを導入するにはどうしたらよいのか、色々調べた結果、以下のようになりました。
COleDispatchDriverの使い方
- ClassWizardでオートメーションのタブを選択
- 「クラス追加」→「タイプライブラリから」を選択
- 実装されているモジュールのOLBファイルを選ぶ(今回はExcelを使いたかったのでExcel9.OLBを選ぶ)
- 使用するクラスを選択(ここではグラフのタイトルを制御するクラスChartTitleが欲しかったのでそれを選ぶ)
これで準備が完了。あとはChartを制御しているところで
- Chart.SetHasTitle(TRUE)を呼び出す
- ChartTitle.m_lpDispatch = Chart.GetChartTitle()を呼び出す。
- ChartTitle.SetText("グラフタイトル")を呼び出す
な感じでグラフタイトルを決めることができました。1番目のSetHasTitle(TRUE)を呼び出さないとChartTitleオブジェクトが生成されないという文章を見ましたので、注意が必要ですね。
と、ここまでわかるのに何回もOLEViewerを覗きました…。ということで、なんか日本語とかでこの手の解説(特にExcelをC++で制御する系)がなかったので、ここにメモっておきます*2。