Excelオートメーションクライアントの作成方法(VC++2005, MFC) – プログラミング – Home

Excelオートメーションクライアント...
 
通知
すべてクリア

[解決済] Excelオートメーションクライアントの作成方法(VC++2005, MFC)


甚平
 甚平
(@甚平)
ゲスト
結合: 16年前
投稿: 4
Topic starter  

環境:
VC++2005 Pro.
Excel2003
Windows Xp Pro.

MFCを使ったWindowsプログラムでExcelを自動化する方法についてお尋ねします。

http://support.microsoft.com/kb/307473/
このページに書かれている手順のとおり、Typelibクラス追加ウィザードによって、
_ApplicationインターフェースのMFCラッパクラスをプロジェクトに追加しました。
追加されたファイル名はCApplicationl.hです。

次に、ダイアログボックスクラスのファイルにこのCApplication.hをインクルードし
ました。

// AutoProjectDlg.cpp
#include stdafx.h
#include CApplication.h

この状態でビルドしたところ、エラーが大量に発生して失敗しました(エラーメッセー
ジの一部は末尾に添付)。
エラーの発生場所はすべてexcel.tlh内です。

前記ウェブページのタイトルは「VisualC++.NETから~」となっていますが、次のページ
でもこれを参照するように指示されていますので、VC2005でもこの手順で良いと理解し
ました。
「MFC および Visual C++ 2005 または Visual C++ .NET で Excel を自動化して~」
http://support.microsoft.com/kb/308407/ja

これらのページに書かれていること以外で、MFCラッパクラスを作成、使用するうえで必
要な手順があるのでしょうか?

あるいは、Typelibクラス追加ウィザードによって追加したMFCクラスにはなにか修正す
べきところがあるのでしょうか?

以上、よろしくお願いいたします。

-----

# エラーの総数は200個以上あるので、最初の一部のみ添付します。

エラー 13 error C2371: 'FontPtr' : 再定義されています。異なる基本型で
す。 d:\cpp\081218excel\autoproject\debug\excel.tlh 1219
エラー 14 error C2786: 'BOOL (__stdcall *)(HDC,int,int,int,int)' :
__uuidof の無効なオペランドです。
d:\cpp\081218excel\autoproject\debug\excel.tlh 1297
エラー 15 error C2923: '_com_IIID' : 'Rectangle' は、有効な テンプレー
ト 型引数 (パラメータ '_Interface') ではありません。
d:\cpp\081218excel\autoproject\debug\excel.tlh 1297
エラー 16 error C3203: '_com_IIID' : 非特殊クラス テンプレート は、テン
プレート 引数として テンプレート パラメータ '_IIID' に使用できません。実際の型
を指定してください d:\cpp\081218excel\autoproject\debug\excel.tlh 1297
(以下略)


引用未解決
トピックタグ
subaru
 subaru
(@subaru)
ゲスト
結合: 19年前
投稿: 381
 

>あるいは、Typelibクラス追加ウィザードによって追加したMFCクラスにはなにか修正す
>べきところがあるのでしょうか?

ウィザードで作成されたMFCクラスに#importで始まる文があれば削除してみてください。
(生成されたtlh、tliも削除して構いません)


返信引用
甚平
 甚平
(@甚平)
ゲスト
結合: 16年前
投稿: 4
Topic starter  

sakura様、ご回答ありがとうございました。

> ウィザードで作成されたMFCクラスに#importで始まる文があれば削除してみてくださ
い。
> (生成されたtlh、tliも削除して構いません)

ウィザードが作成したCApplication.hに#import文がありました。
#import文を削除後、ビルドに成功しました。
Excelを起動するサンプルコードも実行できました。

なぜ#import文が要らないのか、要らないものならばなぜWizardが書いてしまうのかとい
う疑問は残りますが、それについてはおいおい調べたいと思います。

----------

次に、

「MFC および Visual C++ 2005 または Visual C++ .NETでExcelを自動化して~」
http://support.microsoft.com/kb/308407/ja

で説明されているサンプルを試すため、

_Workbook
_Worksheet
Workbooks
Worksheets
Range

インターフェースのMFCラッパクラスをTypelibクラス追加ウィザードで作成しました。
追加されたヘッダファイルは次の5つです。

CWorkbook.h
CWorksheet.h
CWorkbooks.h
CWorksheets.h
CRange.h

これらのファイルからも#import文を削除したうえで、ダイアログボックスクラスのヘッ
ダファイルの#pragma onceディレクトリ直後で#includeしてからビルドしたところ、ま
たエラーが大量発生しました。

これらのヘッダのうちどれが問題かを調べたところ、エラーが発生するのは

CWorkbooks.h
CWorksheets.h
CRange.h

のいずれかひとつ以上をインクルードしたときでした。
例えば、CWorkbooks.hをインクルードしたときのエラーメッセージを見ると、

Application
XLCreator
Parameter
RHS

といった識別子が定義されていないとおこられています。
確かにこれらを定義したヘッダなどはプロジェクト内にないので、当たり前ではありま
す。

インクルードすべきヘッダファイルがあるのではないかとアタリをつけてMSDN等も調べ
ているところですが、現時点で判明していません。
たびたび申し訳ありませんが、ご存じでしたらご教示ください。


返信引用
甚平
 甚平
(@甚平)
ゲスト
結合: 16年前
投稿: 4
Topic starter  

誤記:sakura様
訂正:subaru様

失礼しました。


返信引用
subaru
 subaru
(@subaru)
ゲスト
結合: 19年前
投稿: 381
 

正しい対処方法は知りませんがとりあえず動かすなら
・定義されてない型をLPDISPATCHに変更する
・enumの定義をOLEViewerか生成されたtlhの中から定義を探して持ってくる
くらいしか思いつきません。


返信引用
甚平
 甚平
(@甚平)
ゲスト
結合: 16年前
投稿: 4
Topic starter  

subaru様、ご回答ありがとうございます。

エラーが発生していた

CWorkbooks.h
CWorksheets.h
CRange.h

の3ファイルについて、

Application --> LPDISPATCH
XLCreator --> long ※ CApplication.hファイルを参考にした。
Font --> LPDISPATCH

と変更した後、ビルドに成功しました。

しかし、

「MFC および Visual C++ 2005 または Visual C++ .NETでExcelを自動化して~」
http://support.microsoft.com/kb/308407/ja

にあるサンプルコードを記述してからコンパイルしたところまたエラーが...orz

エラーの原因は、サンプルコードではウィザードが作成したクラスにはないメンバ関数
を使っていたり、引数の個数が異なっていたりとさまざまです。
サンプルコードの間違いかとも思いましたが、例えばCWorkbookクラスには当然あるだろ
うと思ったget_WorkSheets関数(あるいはそれに相当する関数)が見あたらない、とい
った具合に、Wizardが作成したクラスにも怪しいところが多々あります。

MFCラッパクラスがWizardで簡単に作れるのなら開発効率が良いと思って試していたので
すが大いに期待がはずれてしまいました。
これ以上の調査をしている時間がなくなってしまったので、今回はMFCラッパクラスはあ
きらめて、#importしたインターフェースをナマで使うか、VBに流れるかします。

解決しませんでしたがこのスレッドは閉じます。

おつきあいくださりありがとうございました。
> subaru様、皆様


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました