WebBrowser コントロールを使用して、Visual C# 2005 または Visual C# .NET で Office ドキュメントを開く方法

この記事の Microsoft Visual Basic .NET バージョンについては、「304643」 参照してください。

概要

Microsoft Visual C# フォームに直接 Microsoft Office ドキュメントを表示したり、埋め込んだりすることもできます。 Microsoft Visual C# 2005 および Microsoft Visual C# .NET には、フォームに Office ドキュメントを埋め込むことができる OLE コントロールは用意されていません。 既存のドキュメントを埋め込んで、Visual C# フォームでインプレース ActiveX ドキュメント オブジェクトとして開く場合は、Microsoft WebBrowser コントロールを使用することをお勧めします。

この記事では、既存の Office ドキュメントを参照する方法と、WebBrowser コントロールを使用して Visual C# フォーム内に表示する方法について説明します。

詳細情報

ActiveX ドキュメントは、従来の OLE オブジェクトよりも ActiveX コントロールのように動作する埋め込み可能な OLE オブジェクトです。 従来の埋め込みオブジェクトとは異なり、ActiveX ドキュメントは、より大きなドキュメント内の包含オブジェクトとして設計されていません。 代わりに、単に表示されている (Microsoft Internet Explorer など) または他のドキュメント (Microsoft Office バインダー ファイルなど) を含む単一のリソースに収集されている完全なドキュメントと見なされます。 WebBrowser コントロールでホストされている ActiveX ドキュメントは常にアクティブです。そのため、従来の OLE 埋め込みオブジェクトとは異なり、インプレース アクティブ化の意味はありません。

Visual C# 2005 および Visual C# .NET では現在、ActiveX ドキュメントの直接のホストはサポートされていませんが、この目的で WebBrowser コントロールを使用できます。 WebBrowser コントロール (Shdocvw.dll) は Internet Explorer の一部であり、Internet Explorer がインストールされているシステムでのみ使用できます。

Office ドキュメントを開く Visual C# アプリケーションを作成する

Office ドキュメントを開く Visual C# アプリケーションを作成するには、次の手順に従います。

  1. Visual C# 2005 または Visual C# .NET で新しい Windows アプリケーション プロジェクトを作成します。 Form1 は既定で作成されます。

    メモ Visual C# 2005 で、SHDocVw.dll ファイルまたはAxSHDocVw.dll ファイルが見つからない場合は、Visual Studio コマンド プロンプトで次のコマンドを実行します。

    aximp %WINDIR%\system32\shdocvw.dll
    

    次に、Microsoft Web Browser コントロールの共通言語ランタイム プロキシ (SHDocVw.dll) とWindows フォーム プロキシ (AxSHDocVw.dll) を作成します。 Visual C# 2005 で DLL ファイルを追加するには、次の手順に従います。

    1. [ プロジェクト] メニューで、[ 参照の追加] をクリックします。
    2. [参照の追加] ダイアログ ボックスで、[参照] をクリックします。
    3. AxSHDocVw.dll ファイルとSHDocVw.dll ファイルを見つけて選択します。
    4. これら 2 つのファイルのプロジェクト参照を追加するには、[OK] をクリック します
  2. [ツール] メニューの [ツール ボックスのカスタマイズ] をクリックして、[ツール ボックスのカスタマイズ] ダイアログ ボックスを開きます。 [COM コンポーネント] タブで、Microsoft WebBrowser への参照を追加します。 [OK] をクリックして、WebBrowser コントロールをWindows フォーム ツールボックスに追加します。 WebBrowser コントロールは、ツールボックスのテキスト エクスプローラーと共に表示されます。

    メモ Visual Studio 2005 では、手順 2. を実行する必要はありません。

  3. ツールボックスを使用して、WebBrowser コントロール、OpenFileDialog コントロール、および CommandButton コントロールを Form1 に追加します。 これにより、AxWebBrowser1、OpenFileDialog1、および Button1 メンバー変数が Form1 クラスに追加されます。 Visual C# 2005 では、webBrowser1、openFileDialog1、および button1 メンバー変数が追加されます。

  4. Form1 で、Button1 をダブルクリックします。 これにより、Button1_Click イベントが Form1 に追加されます。

  5. Form1 のコード ウィンドウで、次の名前空間を一覧に追加します。

    using System.Reflection;
    
  6. 次のように、Form1 クラスでプライベート メンバーを定義します。

    private Object oDocument;
    
  7. Form1 クラスの InitializeComponent メソッドの最後に、Form1_Load、Form1_Closed、およびaxWebBrowser1_NavigateComplete2イベントを処理する次のコードを追加します。

    this.axWebBrowser1.NavigateComplete2 += new AxSHDocVw.DWebBrowserEvents2_NavigateComplete2EventHandler(this.axWebBrowser1_NavigateComplete2);
    this.Load += new System.EventHandler(this.Form1_Load);
    this.Closed += new System.EventHandler(this.Form1_Closed);
    
  8. 次のコードを置き換えます

    private void button1_Click(object sender, System.EventArgs e)
    {
    }
    
    

    置換後:

    private void button1_Click(object sender, System.EventArgs e)
    {
    
    String  strFileName;
    
    //Find the Office document.
     openFileDialog1.FileName = "";
     openFileDialog1.ShowDialog();
     strFileName = openFileDialog1.FileName;
    
    //If the user does not cancel, open the document.
     if(strFileName.Length != 0)
     {
      Object refmissing = System.Reflection.Missing.Value;
      oDocument = null;
      axWebBrowser1.Navigate(strFileName, ref refmissing , ref refmissing , ref refmissing , ref refmissing);
     }
    }
    
    public void Form1_Load(object sender, System.EventArgs e)
    {
     button1.Text = "Browse";
     openFileDialog1.Filter = "Office Documents(*.doc, *.xls, *.ppt)|*.doc;*.xls;*.ppt" ;
     openFileDialog1.FilterIndex = 1;
    }
    
    public void Form1_Closed(object sender, System.EventArgs e)
    {
     oDocument = null;
    }
    
    public void axWebBrowser1_NavigateComplete2(object sender, AxSHDocVw.DWebBrowserEvents2_NavigateComplete2Event e)
    {
    
    //Note: You can use the reference to the document object to 
     //      automate the document server.
    
    Object o = e.pDisp;
    
    oDocument = o.GetType().InvokeMember("Document",BindingFlags.GetProperty,null,o,null);
    
    Object oApplication = o.GetType().InvokeMember("Application",BindingFlags.GetProperty,null,oDocument,null);
    
    Object oName = o.GetType().InvokeMember("Name",BindingFlags.GetProperty ,null,oApplication,null);
    
    MessageBox.Show("File opened by: " + oName.ToString() ); 
    }
    
    

    メモ Visual Studio 2005 でコードを変更する必要があります。 既定では、Visual C# は、Windows フォーム プロジェクトを作成するときに、1 つのフォームをプロジェクトに追加します。 フォームは Form1 という名前です。 フォームを表す 2 つのファイルは、Form1.cs と Form1.designer.cs という名前です。 Form1.cs でコードを記述します。 Form1.designer.cs ファイルは、Windows フォーム デザイナーがツールボックスからコントロールをドラッグ アンド ドロップすることによって実行したすべてのアクションを実装するコードを記述する場所です。

    Visual C# 2005 のWindows フォーム デザイナーの詳細については、次の Microsoft Developer Network (MSDN) Web サイトを参照してください。https://msdn.microsoft.com/en-us/library/ms173077.aspx

  9. F5 キーを押してプロジェクトを実行します。 [参照] をクリックすると、[開く] ダイアログ ボックスが表示され、Word 文書、Excel ワークシート、または PowerPoint プレゼンテーションを参照できます。 任意のファイルを選択し、[開く] をクリックします。 ドキュメントが WebBrowser コントロール内で開き、Office ドキュメント サーバーの名前を表示するメッセージ ボックスが表示されます。

WebBrowser コントロールを使用する場合の考慮事項

WebBrowser コントロールを使用する場合は、次のことを考慮する必要があります。

  • WebBrowser コントロールは、ドキュメントを非同期的に参照します。 WebBrowser1.Navigate を呼び出すと、ドキュメントが完全に読み込まれる前に、Visual C# アプリケーションにコントロールが返されます。 含まれているドキュメントの自動化を計画している場合は、NavigateComplete2 イベントを使用して、ドキュメントの読み込みが完了したときに通知を受け取る必要があります。 渡される WebBrowser オブジェクトの Document プロパティを使用して、前のコードで oDocument に設定されている Office ドキュメント オブジェクトへの参照を取得します。

  • WebBrowser コントロールでは、メニューのマージはサポートされていません。

  • Internet Explorer バージョン 5.0 以降では、次のコードを使用して、ドッキングされたツール バーを表示できます。

     // This is a toggle option, so call it once to show the 
     // toolbars and once to hide them. This works with Internet Explorer 5
     // but often fails to work properly with earlier versions.
    
    Object refmissing = System.Reflection.Missing.Value;
     axWebBrowser1.ExecWB(SHDocVw.OLECMDID.OLECMDID_HIDETOOLBARS, SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_DONTPROMPTUSER,ref refmissing , ref refmissing);
    
  • 1 つのプロジェクトに複数の WebBrowser コントロールがあり、各コントロールに同じ種類の Office ドキュメント (つまり、すべての Word ドキュメントまたはすべての Excel ワークシート) が読み込まれるという既知の問題がいくつかあります。 Microsoft では、プロジェクトごとに 1 つのコントロールのみを使用し、一度に 1 つのドキュメントを参照することをお勧めします。

    最も一般的な問題は、無効に表示される Microsoft Office コマンド バーです。 同じフォームに 2 つの WebBrowser コントロールがあり、両方とも Word 文書が読み込まれ、前の手法のいずれかを使用してツール バーを表示した場合、ツール バーのセットは 1 つだけアクティブになり、正しく動作します。 もう 1 つは無効になっており、使用できません。

  • 現在のコンテンツの WebBrowser コントロールをクリアするには、別のコマンド ボタンの Click イベント (またはコード内の他の適切な場所) で、次のコードを使用して既定の空白ページを参照します。

       AxWebBrowser1.Navigate("about:blank");
    

WebBrowser コントロールを 2007 Microsoft Office プログラムと共に使用する場合の考慮事項

既定では、2007 Office プログラムは Web ブラウザーで Office ドキュメントを開けません。 この動作は、WebBrowser コントロールにも影響します。 2007 Office ドキュメントを開くアプリケーションを開発するときは、WebBrowser コントロールの代わりにカスタム ActiveX ドキュメント コンテナーを使用することをお勧めします。

WebBrowser コントロールとの下位互換性を必要とする既存のアプリケーションの場合は、Internet Explorer を構成するようにレジストリを変更できます。 この方法を使用すると、Web ブラウザーで 2007 Office ドキュメントを開く Internet Explorer を構成できます。 詳細については、次の記事番号をクリックして、Microsoft サポート技術情報の記事を表示してください。

927009 Windows Internet Explorer 7 で 2007 Microsoft Office プログラム ドキュメントを表示しようとすると、新しいウィンドウが開きます

注:

Microsoft サポート技術情報の記事927009に記載されている方法を使用してレジストリを変更した場合、この変更はアプリケーションで使用する WebBrowser コントロールに影響します。 この変更は、Internet Explorer のすべてのインスタンスにも影響します。 さらに、このメソッドは、今後のバージョンの Microsoft Office スイートでは機能しない可能性があります。 そのため、このメソッドは、既存のアプリケーションとの互換性のためにのみ使用することをお勧めします。

関連情報

WebBrowser コントロールの使用の詳細については、次の記事番号をクリックして、Microsoft サポート技術情報の記事を表示してください。

  • 304562 Visual Studio 2005 と Visual Studio .NET では、Windows フォームの OLE コンテナー コントロールが提供されません

  • 243058 WebBrowser コントロールを使用して Office ドキュメントを開く方法

  • 927009 Windows Internet Explorer 7 で 2007 Microsoft Office プログラム ドキュメントを表示しようとすると、新しいウィンドウが開きます