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 バインダーファイルなど) を使用して1つのリソースに収集されるドキュメントであると見なされます。 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 ファイルが見つからない場合は、Visual Studio コマンドプロンプトで次のコマンドを実行します。

    aximp %WINDIR%\system32\shdocvw.dll
    

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

    1. [ プロジェクト] メニューで、[ 参照の追加] をクリックします。
    2. [参照の追加] ダイアログ ボックスで、[参照] をクリックします。
    3. AxSHDocVw ファイルと 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] をダブルクリックします。 これにより、Form1 に Button1_Click イベントが追加されます。

  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つ追加します。 Form には、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 を呼び出すと、ドキュメントが完全に読み込まれる前に、Visual C# アプリケーションに制御が戻されます。 含まれているドキュメントの自動化を計画している場合は、NavigateComplete2 イベントを使用して、ドキュメントの読み込みが完了したときに通知されるようにする必要があります。 Office document オブジェクトへの参照を取得するには、渡された WebBrowser オブジェクトの Document プロパティを使用します。これは、上記のコードでは、oDocument に設定されています。

  • 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つのツールバーセットのみがアクティブで正しく動作します。 もう一方は無効になっており、使用することはできません。

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

       AxWebBrowser1.Navigate("about:blank");
    

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

既定では、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 スイートの今後のバージョンでは機能しない場合があります。 そのため、この方法は既存のアプリケーションとの互換性のためにのみ使用することをお勧めします。

References

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

  • 304562 visual studio 2005 と visual studio .net は、Windows フォーム用の OLE コンテナーコントロールを提供しません。

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

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