はじめに

このコンテンツで使用している環境は次のとおりです。

MFCクラスの作成方法

VC++からのofficeオートメーションの使用

vc++のコードからOfficeオートメーションを利用するための方法として

  1. #import文を使用
  2. タイプライブラリからMFCクラスを生成する

上記、二つの方法があります。前者の場合、プロパティなどの設定値に定数を使用することができますがMicrosoftの公式見解としてはこの方法はあまり勧められていないようです。

#import は高機能ですが、あまりお勧めしません。一般的に、このディレクティブを Microsoft Office アプリケーションで使用すると、参照カウントの問題が発生します。

したがって当コンテンツではタイプライブラリからMFCラッパークラスを生成しこれを利用する方法をとっています。

タイプライブラリからMFCラッパークラスを生成する

まず、プロジェクトにExcelを操作するためのラッパークラスを追加します。クラスビューで[追加]-[クラスの追加]でダイアログを表示し[TylpeLibからのMFCクラス]を選択します。

クラスの追加
fig-1.

次に実際にタイプライブラリを選択し生成するクラスを選択します。Excelを操作しますので[使用できるタイプライブラリ]のドロップダウンから「Micorsoft Excel9.0 Object Library<1.3>」を選択します。(インストールしているExcelのバージョンにより違いがあるかもしれません。)

タイプライブラリ選択後、インターフェイス欄から生成するクラスを選択します。当コンテンツでは、次のインタフェースを使用します。

タイプライブラリの選択
fig-2.

必要なインターフェイスを選択し完了ボタンを押すと、各インタフェースに対応したクラスが追加されているのがわかると思います。

追加されたクラス
fig-3.

追加されたクラスは名前どおりのラッパクラスで以下のようになります。以降の処理ではこれらのクラスを使用してExcelを操作することになります。

CApplication
Excelアプリケーションのラッパクラス
CWorkbooks
ワークブックコレクションのラッパクラス
CWorksheets
ワークシートコレクションのラッパクラス
CWorkbook
ワークブックオブジェクトのラッパクラス
CWorksheet
ワークシートオブジェクトのラッパクラス
CRange
Rangeオブジェクトのラッパクラス

Visual Studio2008での補足

VisualStudio2008ではラッパクラスを作成すると各ソースの2行目に

#import "C:¥¥Program Files¥¥Microsoft Office¥¥Excel9.OLB no_namespace

のコードがあります。先に書いたように、当コンテンツでは#importを使用しませんのでこの行はすべてコメントします。$Date:: 2009-04-15 19:26:48 #$加筆

CRangeクラスをincludeしてコンパイルすると下記のエラーがでます。 warning C4003: マクロ 'DialogBoxA' に指定された実引数の数が少なすぎます。
error C2059: 構文エラー : ','
これを回避するためにはCRange.hの"Variant DialogBox"を"Variant _DialogBox" に変更してください。(参考:Microsoftサポートオンライン