- ベストアンサー
excelオートメーションでの読込み先ファイルパス指定について
開発環境 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; COleVariant covOptional((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 ); // 以下セルの値を取得する処理が続く・・・・
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
COM から"Excel.Application" のようにエクセルアプリケーションオブジェクトを作る場合、既定のフォルダは、プログラムの起動フォルダにはなりません(というか普通ならないと考えた方がよい) ファイル名からフルパスを作ってやってフルパスで指定するのが良いです。
その他の回答 (1)
- FAY
- ベストアンサー率49% (95/193)
ご自身が言われているように"data.xls"でいけると思いますが・・・ もしかしてVCからデバッグで起動していませんか? VCから起動した場合、カレントディレクトリはEXEの場所ではなく、 プロジェクトがあるフォルダになります。 exeファイルを直接実行してみたり、 data.xlsを*.dspがあるフォルダにおいて実行したりするとどうなりますか?
補足
レスありがとうございます。 私も"data.xls"で行けるはずだと思っているのですが、なぜがダメでした。 *.dspのあるディレクトリにdata.xlsを置いてVC上から起動しても、exeのあるディレクトリにdata.xlsを置いてexeから実行してもエラーになってしまいます・・。 プロジェクトファイル自体がおかしくなっているのでしょうか?
お礼
レスありがとうございます。 GetCurrentDirectory()にてカレントディレクトリを取得してフルパスを指定したらうまくいきました! フルパス指定しないとダメなのですね。勉強になりました。ありがとうございました。