VCからのExcel起動時のパス指定 – プログラミング – Home

VCからのExcel起動時のパス指定
 
通知
すべてクリア

[解決済] VCからのExcel起動時のパス指定


米粒
 米粒
(@米粒)
ゲスト
結合: 17年前
投稿: 30
Topic starter  

こんにちわ。
↓の続きです。
http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200806/08060060.txt

前回、無事VCからExcelマクロを起動させることはできたのですが、ワークブックを開く
時に

> //WorkBookを追加する
> WorkbooksPtr pBooks = pXL->Workbooks;
> _WorkbookPtr pBook = pBooks->Open(C:\\Work\\BOOK2.XLS);

と、フルパスをベタ書きするのは気持ち悪いので
GetCurrentDirectoryでカレントディレクトリを取得して

//Openの引数の型が_bstr_tな為、char[]->CString->_bstr_t に変換
char chCurrentDir[MAX]; //MAX:256
CString csCurrentDir;
_bstr_t bsCurrentDir;
GetCurrentDirectory( sizeof( chCurrentDir ), chCurrentDir );
csCurrentDir = chCurrentDir; //char[]->CString
csCurrentDir.Replace( _T(\\), _T(\\\\) ); //(C:\Work)->(C:\\Work)
csCurrentDir += \\\\Debug\\\\BOOK2.XLS;
bsCurrentDir = csCurrentDir.AllocSysString(); //CString->_bstr_t

//WorkBookを追加する
WorkbooksPtr pBooks = pXL->Workbooks;
_WorkbookPtr pBook = pBooks->Open( bsCurrentDir );

このように実装してみたんですが、Openのところで例外発生してしまうようです。
パスは確認したので合ってるはずなんですが…何が原因なのか教えていただけるとありが
たいです。

よろしくお願いします。


引用未解決
トピックタグ
と
 と
(@と)
ゲスト
結合: 20年前
投稿: 33
 

目的のパスが
C:\Work\Debug\BOOK2.XLSだとするなら

>csCurrentDir.Replace( _T(\\), _T(\\\\) ); //(C:\Work)->(C:\\Work)
は必要ないのでは?

>csCurrentDir += \\\\Debug\\\\BOOK2.XLS;
も\\\\ではなく\\では?

これだと目的のファイルの場所が
C:\\Work\\Debug\\BOOK2.XLS
になっちゃいますよ?


返信引用
米粒
 米粒
(@米粒)
ゲスト
結合: 17年前
投稿: 30
Topic starter  

と さん
回答ありがとうございます。

> >csCurrentDir.Replace( _T(\\), _T(\\\\) ); //(C:\Work)->(C:\\Work)
> は必要ないのでは?
>
> >csCurrentDir += \\\\Debug\\\\BOOK2.XLS;
> も\\\\ではなく\\では?

確かにそのとおりでした。。。
Replaceの行をコメントアウトし、
\\\\を\\に直したらうまく動作しました。

パスをベタで指定する時は
C:\\Work\\Debug\\BOOK2.XLS
でOKだったので変数を引数として渡す際にも\\としなければならないという思い込みだ
ったようです。
エスケープ文字についてもっと知らないといけないですね。

それと、ファイルダイアログ等でファイルを指定したりする度に
GetCurrentDirectoryで得られるカレントディレクトリが変わってくるのも混乱の元だっ
たようです。

何事も先入観を持って臨むのは良くないという事を再確認です。
ありがとうございました。


返信引用
米粒
 米粒
(@米粒)
ゲスト
結合: 17年前
投稿: 30
Topic starter  

また解決にチェック入れ忘れました。
すいません。。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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