[HOWTO] WebBrowser コントロールを使って Office ドキュメントを開く方法

  JP243058



  
概要
Visual Basic で直接 Office ドキュメントを表示して作業する場合、OLE コンテナ コントロールを使って埋め込み
 OLE オブジェクトを作成する代わりに、既存のドキュメントへのリンクを作成して、そのドキュメントを埋め込み 
ActiveX ドキュメント オブジェクトとして表示したいことがあります。このような場合、Microsoft WebBrowser
 コントロールを使用して問題を解決することができます。 

この資料では、WebBrowser コントロールを使って、既存の Office ドキュメントを指定して Visual Basic 
で表示する方法について説明します。 



詳細
ActiveX ドキュメントは埋め込み OLE オブジェクトですが、従来の OLE オブジェクトより ActiveX 
コントロールに類似しています。しかし、通常の埋め込みオブジェクトと違って、サイズのより大きなドキュメントに
コンテナとして埋め込むようには設計されていません。ActiveX ドキュメントは、それ自体で独立したドキュメント
として扱われるため、Internet Explorer などのビューワに表示したり、他のドキュメント (Office バインダ 
ファイルなど) と一緒に単一のリソースにまとめたりすることができます。

現在の Microsoft Visual Basic では、ActiveX ドキュメントを直接ホストすることはサポートされていませんが、
Internet Explorer と WebBrowser コントロールを使えば、この制約を回避できます。ただし、WebBrowser 
コントロール (Shdocvw.dll) は Internet Explorer の一部なので、Internet Explorer がインストールされ
ているシステムでのみ使用することができます。 

Office ドキュメントを表示する Visual Basic アプリケーションを作成する 
Office ドキュメントを表示する Visual Basic アプリケーションを作成するには、次の手順を実行します。 
Visual Basic を起動し、新規の 標準 EXE プロジェクト を作成します。デフォルトで Form1 が作成されます。 


[プロジェクト] メニューの [コンポーネント] を選択して [コンポーネント] ダイアログ ボックスを開きます。
[コンポーネント] ダイアログ ボックスで [Microsoft Common Dialog Control] と 
[Microsoft Internet Controls] への参照を追加します。[OK] をクリックし、これらの項目をツール
ボックスに追加します。 


Form1 に、WebBrowser コントロールと CommonDialog コントロールのインスタンス、および 
CommandButton を追加します。


次のコードを Form1 のコード ウィンドウに追加します。 


Option Explicit

Dim oDocument As Object

Private Sub Command1_Click()
Dim sFileName As String

' Find an Office file...
With CommonDialog1
.FileName = ""
.ShowOpen
sFileName = .FileName
End With

' If the user didn't cancel, open the file...
If Len(sFileName) Then
Set oDocument = Nothing
WebBrowser1.Navigate sFileName
End If
End Sub

Private Sub Form_Load()
Command1.Caption = "Browse"
With CommonDialog1
.Filter = "Office ドキュメント " & _
"(*.doc, *.xls, *.ppt)|*.doc;*.xls;*.ppt"
.FilterIndex = 1
.Flags = cdlOFNFileMustExist Or cdlOFNHideReadOnly
End With
End Sub

Private Sub Form_Unload(Cancel As Integer)
Set oDocument = Nothing
End Sub

Private Sub WebBrowser1_NavigateComplete2(ByVal pDisp As Object, _
URL As Variant)
On Error Resume Next
Set oDocument = pDisp.Document

MsgBox "File opened by: " & oDocument.Application.Name
End Sub
 F5 キーを押してプロジェクトを実行します。[Browse] ボタンをクリックすると、[ファイルを開く] ダイアログ
 ボックスが表示され、表示する Word、Excel、または PowerPoint ファイルの指定を要求されます。
ファイルを指定して [開く] を選択すると、WebBrowser コントロール内に指定したドキュメントが表示されます。
この後、そのドキュメントを開いた Office アプリケーション名が、メッセージ ボックスに表示されます。 


WebBrowser コントロール使用時の注意 
WebBrowser コントロールを使用する際には以下の点に注意してください。 
WebBrowser コントロールは非同期でドキュメントを参照します。これは、WebBrowser1.Navigate を呼び出
した場合、ドキュメントが完全にロードされる前に、Visual Basic アプリケーションにドキュメントの制御が戻ることを
意味します。そのため、ロードしたドキュメントの自動化を計画している場合は、NavigateComplete2 イベントを
使って、ドキュメントのロード完了を確認できるようにする必要があります。また、Office ドキュメント オブジェクトへの
参照を取得するときは、渡された WebBrowser オブジェクトの Document プロパティを使用します。上記のコード
 サンプルでは、このプロパティが "oDocument" に設定されています。 


WebBrowser コントロールでは、メニューのマージはサポートされていません。Visual Basic のメニューに、
ドキュメントのメニュー項目を表示したい場合は、WebBrowser コントロールではなく、OLE コンテナ コントロール
を使用する必要があります。 


通常、WebBrowser コントロールでは、Office ドキュメントを表示する前に、ドッキング ツール バーが非表示に
設定されます。オートメーションを使用して、ドキュメントにフローティング ツール バーを表示するには、次のような
コードを使用します。 


With oDocument.Application.CommandBars("Standard")
.Position = 4 '[msoBarFloating]
.Visible = True
End With
 バージョン 5.0 以降の Internet Explorer では、次のコードを使用すれば、ドッキング ツール バーを表示する
ことができます。 
' これはトグル オプションなので、これを呼び出すとツール バーが表示され、
' もう 1 度呼び出すと非表示にされます。これは Internet Explorer 5 で機能しますが、
' それ以前のバージョンでは多くの場合適切に機能しないことがあります。
WebBrowser1.ExecWB OLECMDID_HIDETOOLBARS, OLECMDEXECOPT_DONTPROMPTUSER
 1 つのプロジェクト内で複数の WebBrowser コントロールを使用する場合、各コントロールに同じ種類の 
Office ドキュメント (たとえば、すべて Word 文書、すべて Excel スプレッドシートなど) をロードすると発生す
る問題がいくつか知られています。そのため、1 つのプロジェクトに使用するコントロールは 1 つだけとし、同時に
表示するドキュメントも 1 つだけとすることをお勧めします。 

既知の問題のうち、最も一般的なのは、Office コマンド バーが無効な状態で表示される問題です。たとえば、
同じフォームで 2 つの WebBrowser コントロールを使用し、両方に Word 文書をロードする場合、上記の
テクニックのいずれかを使って文書にツール バーを表示すると、片方の文書のツール バーはアクティブになり
正常に機能しますが、もう 1 つの文書のツール バーは無効となって使用できません。 


WebBrowser に表示されている内容をクリアするには、他のコマンド ボタンの Click イベント (または、それ以外の
コード内の適切な場所) に次のようなコードを記述し、デフォルトの空白ページを参照するよう設定します。 


WebBrowser1.Navigate "about:blank"
  










  infoboard   管理者用   
このエントリーをはてなブックマークに追加





フリーフォントWEBサービス
SQLの窓WEBサービス

SQLの窓フリーソフト

素材

一般WEBツールリンク

SQLの窓

フリーソフト

JSライブラリ