.docの文書を読み込んで表示したい – プログラミング – Home

.docの文書を読み込んで表示したい
 
通知
すべてクリア

.docの文書を読み込んで表示したい


ガラ
 ガラ
(@ガラ)
ゲスト
結合: 20年前
投稿: 201
Topic starter  

MFC VC++6.0 XP

.docの文書を読み込んで表示したいのですが、「種類が一致しません」というエラーウ
ィンドウがでてしまいます。一日中やってたのですが、うごきませんでした。
つかっているのが、VC++6.0なので、msword.olbしか読めません。

void CTestDispWordDlg::OnButton1()
{
char lpszFileName[] = _T(abc.doc);

_Application MyWord;
MyWord.CreateDispatch(Word.Application); // 接続
// MyWord.m_bAutoRelease = TRUE;
MyWord.SetVisible(TRUE); // アプリケーションを不可視に
Documents m_documents(MyWord.GetDocuments());
m_documents.Open(
&_variant_t(lpszFileName),//&Object^ FileName,
&_variant_t(false),//&Object^ ConfirmConversions::
when 'word' false,else true ;
&_variant_t(true),//&Object^ ReadOnly,
&_variant_t(false),//&Object^ AddToRecentFiles,
&_variant_t("),//&Object^ PasswordDocument,
&_variant_t("),//&Object^ PasswordTemplate,
&_variant_t(false),//&Object^ Revert,
&_variant_t("),//&Object^ WritePasswordDocument,
&_variant_t("),//&Object^ WritePasswordTemplate,
// &_variant_t(wdOpenFormatText),//&Object^ Format,
&_variant_t((long)0),//&Object^ Format,
&_variant_t(false),//&Object^ Encoding,
&_variant_t(true),//&Object^ Visible,
&_variant_t(temp),//&Object^ OpenAndRepair,
&_variant_t((long)0),//&Object^ DocumentDirection,
&_variant_t(false),//&Object^ NoEncodingDialog,
&_variant_t(false)//&Object^ XMLTransform
) ;

}


引用解決済
トピックタグ
ガラ
 ガラ
(@ガラ)
ゲスト
結合: 20年前
投稿: 201
Topic starter  

OLEって、オフィースのバージョンによってクラス名まで違うのですね。
たいへん、なんで、こんなになってるんだろう?


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

COMの仕組み上、既にリリースされているインターフェイスに
追加機能を入れたインターフェイスを公開する場合、インターフェイス名を
変えないといけなかったような気がしますけれど、あってるかなぁ?

以前のインターフェイスを使っているアプリが以前のインターフェイス名で
アクセスした時は以前の機能が動作し、新しいインターフェイス名で
アクセスした時は新しい機能が動作する為だったと思います。
そうする事で古い機能と新しい機能を同居させると言う話だったかと。

この辺の考え方もCOMの仕組みに関わりがあったと思いますよ。


返信引用
hirocco
 hirocco
(@hirocco)
ゲスト
結合: 14年前
投稿: 138
 

遅延でバインドさせるときとかは名称で呼び出しますから,同じ名称は識別できませんね
古いのも使いたいし新しいのも使いたい時はルールはわかりませんけど,名前は変わる必
要があると思いますよ
でも,追加機能が増えたとき名前が変わって,古いのがなくなってしまうのは気まずい感
じがしますね
デバイスが提供してるものが追加機能がついて,バージョンも大きく変わっても,名前さ
え変わっていなければ,古いソフトは構わず動作できますからね

ルールはわかりませんけど・・・


返信引用
ガラ
 ガラ
(@ガラ)
ゲスト
結合: 20年前
投稿: 201
Topic starter  

PATIO さん、hiroccoさん、レスありがとうございます。
例をあげるとApplicationと_Applicationがあってメンバ関数もそれぞれ違うみたいなん
ですが、よくわかりません。
タイプライブラリの各クラス、各メソッドについて、機能、パラメータなどの説明がな
いのが、つらいですね。
手あたり次第にあれこれ読んでみましたが、IvokeHelperのパラメータについては、サー
バ側(この場合、Microsoft word)にありそうなんですが、みつけられません。
ん・・・なんとも、手詰まり感がでてきました。

ちょっと質問は、分岐しちゃいますが、OLEをつかって、ワードの.docファイルやエ
クセルの.xlsなどを出力ファイルとする帳票プログラムみたいなものはできますか?


返信引用
hirocco
 hirocco
(@hirocco)
ゲスト
結合: 14年前
投稿: 138
 

記憶は薄いですけどApplicationの方ですよ
ちがったかな?
あとはOfficeのVBAの操作と同じですね
Officeでできる事はたぶん全部できますよ


返信引用
ガラ
 ガラ
(@ガラ)
ゲスト
結合: 20年前
投稿: 201
Topic starter  

hiroccoさん、レスありがとうございます。
こういうページを見つけて、お勉強してるんですが、
http://www.ujasiri.com/prglib/vc/excel/import/xls_imp_coapp_exp.html

#import C:\Program Files\Common Files\Microsoft Shared\Office11\MSO.DLL
no_namespace rename(DocumentProperties, DocumentPropertiesXL)

と記述している行で
fatal error C1083: インクルード ファイルがオープンできません。\MSO.tlh': Permission denied
というエラーがでてしまいます。
オフィースのOLEを扱うのには、なにか、オフィース、VC++以外に買わないとい
けないのでしょうか?

ちなにみ、わたしの環境は、excel 2003 は、プレインストール、VC++ 6.0
は、大学時代にアカデミックバージョンを買いました。


返信引用
紅'
 紅'
(@紅')
ゲスト
結合: 17年前
投稿: 48
 

出来るか出来ないかで言うと、
VC6.0 + Excel2000/2003 の組み合わせだけで
.xls を開いたり作成したりするソフトを作ったことはありますよ。
5 年以上前なのでもう覚えてませんが。

たしか OLE を使ったExcel の汎用操作管理クラスを作って、
帳票として Excel ファイルを出力してました。
少ないネット上の記事と、VBA の関数名を頼りに手探りでやってた記憶があります。

具体的なアドバイスが出来ないので役立たずで申し訳ないです。


返信引用
ガラ
 ガラ
(@ガラ)
ゲスト
結合: 20年前
投稿: 201
Topic starter  

紅' さん、レスありがとうございます。
たいへん、貴重なご意見ありがとうございます。
エクセルを使うユーザなら、VC++で操作できれば、助かるはずですよね。
マニュアルがないというのは、マイクロソフトは、このあたりを公開してないというこ
とになるのかな?とおもいます。


返信引用
ぺろ
 ぺろ
(@ぺろ)
ゲスト
結合: 20年前
投稿: 6
 

> http://www.ujasiri.com/prglib/vc/excel/import/xls_imp_coapp_exp.html
のページに

word操作編があります。
http://www.ujasiri.com/
http://www.ujasiri.com/prglib/vc/word/vc_word.html

こちらも参照されてみてはいかがでしょう。


返信引用
ryo
 ryo
(@ryo)
ゲスト
結合: 23年前
投稿: 252
 

http://msdn.microsoft.com/en-us/library/ms262200(v=Office.11).aspx
こういうのかな?


返信引用
ガラ
 ガラ
(@ガラ)
ゲスト
結合: 20年前
投稿: 201
Topic starter  

ぺろさん、ryoさん、ありがとうございます。
なかなかバージョンが違うと、動かないのが不思議で、でもエクセルのほうは、なんと
かうごきましたが、Range::SetValue()という関数をRange::SetValue2()に変えなければ
いけませんでした。
それで、やはりマイクロソフトが出している、機能説明というものがなければ、トライ
&エラーの領域を超えることができないので、バグが心配だなぁ・・
とおもっています。

で、ryoさんに載せていただいた、そのマイクロソフトの機能説明ですね。
ありがとうございます。(バージョンが最新なので機能するかどうか、わかりません
が、)今から、読んでみます。

お二人とも非常にたすかりました。ありがとうございました。

PS’)2003の場合、excel関係のタイプライブラリは、Excel.exeに埋め込まれている
ということもわかりました


返信引用
ガラ
 ガラ
(@ガラ)
ゲスト
結合: 20年前
投稿: 201
Topic starter  

ryoさんが載せていただいたページをあれこれ読みました。
2003のバージョンもありました。ワード版もありました。
http://msdn.microsoft.com/en-us/library/microsoft.office.interop.word
(v=office.11).aspx(ワード版)


返信引用
ガラ
 ガラ
(@ガラ)
ゲスト
結合: 20年前
投稿: 201
Topic starter  

でも、書いてる内容が乏しくって、これでプログラムを組めっていうのは、無理なよう
に思います。


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

Office2003の場合、インストールするときにVBAのヘルプもインストールしていれば
VBAWD10.CHMというファイルがOfficeディレクトリのどこかにあるはずです。
VBAで説明されていますが、プロパティやメソッドの内容は一通りわかるので
VC++でも参考になると思います。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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