個人メモ

 開発中のアプリで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を覗きました…。ということで、なんか日本語とかでこの手の解説(特にExcelC++で制御する系)がなかったので、ここにメモっておきます*2

*1:私がこの開発担当になる前に、ということです。

*2:普通はVBあたりでやりますよね…。ぐぐってもVB系の解説しかない…。