Excelのファイルパスの取得について

[戻る]
タブチ 2009/10/01(木) 14:49:14
お世話になります。

環境はXP VC6.0 MFCです。

プログラムからすでに開いているExcelのファイルパスを取得する方法はないものでしょ
うか?

いろいろ調べた結果、実行パスの取得(〜.exe)はできたのですが、ファイルパス
(〜.xls)の取得方法がよくわからないのです。

どなたかご教授ください。

みい 2009/10/01(木) 16:27:54
やりたいのはこれの事でしょうか↓

http://www.ujasiri.com/prglib/vc/excel/import/imp_wbk_FullName.html

タブチ 2009/10/01(木) 17:32:35
みいさん、返信ありがとうございます。

サンプルコードで動作を確認しようとしたところ、

#import "C:\Program Files\Microsoft Office\Office11\excel.exe" no_namespace 
rename("DocumentProperties", "DocumentPropertiesXL")   
の部分でタイプライブラリからオープンできませんというエラーが出てしまいます。


これは現在使用しているExcelの環境が2003のため起きていると判断しまして
#import "C:\Program Files\Microsoft Office\Office11\excel.exe" no_namespace 
rename("DocumentProperties", "DocumentPropertiesXL")   
と書き換えたところ大量のエラーが出てきました。

エラーの内容は主に
・型が指定されていない。
・シンタックスエラー
です。

このエラーはどうやれば回避できるのでしょうか?

VCの知識が足りなくて申し訳ないのですが、どなたか教えてください。

お願いします。

2009/10/01(木) 19:00:11
私は#importを使用する方法がわからないので


Visual C++ Excel操作編(みいさんの提示されたページの一つ上階層です)
http://www.ujasiri.com/prglib/vc/excel/vc_excel.html
の

ClassWizardを使用してタイプライブラリからExcel操作用クラスを取り込み操作する方法
Excelの起動
http://www.ujasiri.com/prglib/vc/excel/xlsopen_exp.html
の部分

    pXlsApp.CreateDispatch("Excel.Application");
    pXlsApp.m_bAutoRelease = TRUE;
    pXlsApp.SetVisible(TRUE);                   

    LPDISPATCH pWkBooks = pXlsApp.GetWorkbooks();
    CString strFile = "C:\\work\\BOOK1.XLS";
    pXlsBooks.AttachDispatch(pWkBooks,TRUE);            
    pXlsBooks.Open((LPCTSTR)strFile);    

の下に↓追加
_Workbook pXlsBook;
LPDISPATCH XlsBook = m_excl.pXlsApp.GetActiveWorkbook();
pXlsBook.AttachDispatch(XlsBook,TRUE);            
CString path = pXlsBook.GetPath();  //パス取得


既に起動しているEXCELのブックの場所が欲しいなら、オープン部分を
Excelアプリケーションへのアタッチ
http://homepage2.nifty.com/hippos/vcexcel/attach_app.html
のような処理への変更も必要かもしれません。

ryo 2009/10/01(木) 20:41:45
ちょっと疑問なんですが・・・

>プログラムからすでに開いているExcelのファイルパスを取得する方法はないものでしょ
うか?
この、「プログラム」は、
現在タブチさんが作成されているアプリケーションのことでしょうか?


>いろいろ調べた結果、実行パスの取得(〜.exe)はできたのですが、ファイルパス
ここでいう「実行パス」が指し示すexeファイルとは?


#自アプリでxlsファイルを開いているなら、パスは既知のはずだし
#既知のパスを引き渡せないところでファイルパスを知りたくなったとしても
#その手法を調べるのにexeのパスを知る方法などの情報に触れるのは違和感がある

2009/10/02(金) 03:12:38
>ryo 2009/10/01(木) 20:41:45

微妙に句読点がないので私も迷いましたが
みいさんとのやり取りで「すでに起動されているEXCEL」への
操作と判断しました。

どちらにしても、みいさんや私の方法ではEXCEL操作が必要なので
別のアプローチがあるかもしれません。

#EXCELのタイトルバーから取れないかと思ったりしました。
#試してません。

タブチ 2009/10/02(金) 23:56:26
[[解決]]
のさん、ryoさんありがとうございます。


ryoさんの質問の答えなんですが、

>現在タブチさんが作成されているアプリケーションのことでしょうか?
そうです。MFCのアプリケーション側から取得したいと考えてます。

>ここでいう「実行パス」が指し示すexeファイルとは?
Officeの中にあるEXCEL.EXEのファイルのことです。
実行パス=ファイルパスという変な勘違いをしてました。


のさんとみいさんが教えてくれたリンクを元に何とかやってみます。

ありがとうございました。

あと返信が遅くなって申し訳ありません。

古いスレッドには追加発言できません。