プロが教えるわが家の防犯対策術!

開発環境 VC++6.0 SP5 Windows2000SP4 MFC AppWizard(exe)使用
EXCEL2000タイプライブラリEXCEL9.OLBをインポートし、オートメーション機能を利用して、EXCEL表から値を読み込むプログラムを作っています。セル読込みは問題ないのですが、読込みファイル名を指定する部分で困っています。C直下にdata.xlsを置いておく場合、"C:\\data.xls"としておけば問題ないのですが、exeと同じディレクトリに置く場合の指定方法が分かりません。単に"data.xls"とすればよいと思うのですが、exe実行時に「'data.xls' が見つかりません。」とエラーが出てしまいます。".\\data.xls"としてみましたが同様でした。VC++上から実行してみても、exeを直接実行してみても同様でした。パスの指定方法が違っているだけだと思うのですが指定方法がわかりません。data.xlsをexeと同じディレクトリに置く場合はどうすればよいのでしょうか。

以下EXCEL読込みソースの一部です。
_Application app; // app is an _Application object.
Workbooks books;
LPDISPATCH lpDisp;
COleVariantcovOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);

app.CreateDispatch("Excel.Application");
app.SetVisible(TRUE);// Get the Workbooks collection.
lpDisp = app.GetWorkbooks(); // Get an IDispatch pointer.
ASSERT(lpDisp);
books.AttachDispatch(lpDisp); // Attach the IDispatch pointer
lpDisp = books.Open("c:\\data.xls", // ここを"data.xls"とするとエラーになる
covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional,
covOptional, covOptional,covOptional, covOptional ); //
以下セルの値を取得する処理が続く・・・・

A 回答 (2件)

COM から"Excel.Application" のようにエクセルアプリケーションオブジェクトを作る場合、既定のフォルダは、プログラムの起動フォルダにはなりません(というか普通ならないと考えた方がよい)


ファイル名からフルパスを作ってやってフルパスで指定するのが良いです。
    • good
    • 0
この回答へのお礼

レスありがとうございます。

GetCurrentDirectory()にてカレントディレクトリを取得してフルパスを指定したらうまくいきました!

フルパス指定しないとダメなのですね。勉強になりました。ありがとうございました。

お礼日時:2006/03/07 15:56

ご自身が言われているように"data.xls"でいけると思いますが・・・


もしかしてVCからデバッグで起動していませんか?
VCから起動した場合、カレントディレクトリはEXEの場所ではなく、
プロジェクトがあるフォルダになります。
exeファイルを直接実行してみたり、
data.xlsを*.dspがあるフォルダにおいて実行したりするとどうなりますか?

この回答への補足

レスありがとうございます。

私も"data.xls"で行けるはずだと思っているのですが、なぜがダメでした。
*.dspのあるディレクトリにdata.xlsを置いてVC上から起動しても、exeのあるディレクトリにdata.xlsを置いてexeから実行してもエラーになってしまいます・・。
プロジェクトファイル自体がおかしくなっているのでしょうか?

補足日時:2006/03/07 14:10
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!