Použití ovládacího prvku WebBrowser k otevření dokumentů Office v jazyce Visual C# 2005 nebo Visual C# .NET

Microsoft Visual Basic .NET verze tohoto článku naleznete v tématu 304643.

Souhrn

Dokument Microsoft Office můžete zobrazit nebo vložit přímo do formuláře Microsoft Visual C#. Microsoft Visual C# 2005 a Microsoft Visual C# .NET neposkytují ovládací prvek OLE, který umožňuje vložit dokument Office do formuláře. Pokud chcete vložit existující dokument a otevřít ho jako objekt dokumentu ActiveX v jazyce Visual C#, je potenciálním řešením použití ovládacího prvku Microsoft WebBrowser.

Tento článek ukazuje, jak přejít na existující dokument Office a jak jej zobrazit ve formuláři Visual C# pomocí ovládacího prvku WebBrowser.

Další informace

Dokumenty ActiveX jsou vložené objekty OLE, které se chovají spíše jako ovládací prvky ActiveX než tradiční objekty OLE. Na rozdíl od tradičního vloženého objektu není dokument ActiveX navržený tak, aby byl obsaženým objektem ve větším dokumentu. Místo toho se považuje za úplný dokument, který se jenom zobrazuje (například v Microsoft Internet Exploreru) nebo shromažďuje do jednoho prostředku s jinými dokumenty (například soubor Microsoft Office Binder). Dokument ActiveX hostovaný v ovládacím prvku WebBrowser je vždy aktivní; Proto na rozdíl od tradičních vložených objektů OLE neexistuje žádný smysl pro místní aktivaci.

I když Visual C# 2005 a Visual C# .NET aktuálně nepodporují hostování dokumentů ActiveX přímo, můžete k tomuto účelu použít ovládací prvek WebBrowser. Ovládací prvek WebBrowser (Shdocvw.dll) je součástí aplikace Internet Explorer a lze jej použít pouze v systémech s nainstalovanou aplikací Internet Explorer.

Vytvoření aplikace Visual C#, která otevře dokumenty Office

Pokud chcete vytvořit aplikaci Visual C#, která otevře dokumenty Office, postupujte takto:

  1. Vytvořte nový projekt aplikace pro Windows v jazyce Visual C# 2005 nebo v jazyce Visual C# .NET. Formulář1 je ve výchozím nastavení vytvořen.

    Poznámka Pokud v jazyce Visual C# 2005 nemůžete najít soubor SHDocVw.dll nebo soubor AxSHDocVw.dll, spusťte na příkazovém řádku sady Visual Studio následující příkaz:

    aximp %WINDIR%\system32\shdocvw.dll
    

    Potom vytvořte proxy common language runtime (SHDocVw.dll) a proxy model Windows Forms (AxSHDocVw.dll) pro ovládací prvek webového prohlížeče Microsoft. Chcete-li přidat soubory DLL v jazyce Visual C# 2005, postupujte takto:

    1. V nabídce Projekt klikněte na Přidat odkaz.
    2. V dialogovém okně Přidat odkaz klepněte na tlačítko Procházet.
    3. Vyhledejte a vyberte soubor AxSHDocVw.dll a soubor SHDocVw.dll.
    4. Chcete-li přidat odkazy na projekt pro tyto dva soubory, klikněte na tlačítko OK.
  2. V nabídce Nástroje klepněte na tlačítko Přizpůsobit ToolBox otevřete dialogové okno Přizpůsobit ToolBox. Na kartě Komponenty modelu COM přidejte odkaz na Microsoft WebBrowser. Kliknutím na tlačítko OK přidejte ovládací prvek WebBrowser do sady nástrojů model Windows Forms. WebBrowser Ovládací prvek se zobrazí s průzkumníkem textu v panelu nástrojů.

    Poznámka V sadě Visual Studio 2005 nemusíte provádět krok 2.

  3. Pomocí sady nástrojů přidejte Ovládací prvek WebBrowser, ovládací prvek OpenFileDialog a ovládací prvek CommandButton do form1. Tím se přidá AxWebBrowser1, OpenFileDialog1, a Button1 členské proměnné Form1 třídy. V jazyce Visual C# 2005 jsou přidány členské proměnné webBrowser1, openFileDialog1 a button1.

  4. Ve formuláři Form1 poklikáte na tlačítko1. Tím se přidá událost Button1_Click do formuláře Form1.

  5. V okně kódu pro Form1 přidejte do seznamu následující obor názvů:

    using System.Reflection;
    
  6. Definujte privátního člena ve třídě Form1 následujícím způsobem:

    private Object oDocument;
    
  7. Na konci InitializeComponent metoda třídy Form1, přidejte následující kód pro zpracování Form1_Load, Form1_Closed a axWebBrowser1_NavigateComplete2 události:

    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. Nahraďte následující kód.

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

    S:

    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() ); 
    }
    
    

    Poznámka Musíte změnit kód v sadě Visual Studio 2005. Visual C# ve výchozím nastavení přidá jeden formulář do projektu při vytváření projektu model Windows Forms. Formulář má název Form1. Dva soubory, které představují formulář, mají název Form1.cs a Form1.designer.cs. Kód napíšete v Souboru Form1.cs. Soubor Form1.designer.cs je místo, kde návrhář model Windows Forms zapíše kód, který implementuje všechny akce, které jste provedli přetažením ovládacích prvků z panelu nástrojů.

    Další informace o model Windows Forms Designer v jazyce Visual C# 2005 naleznete na následujícím webu Microsoft Developer Network (MSDN):https://msdn.microsoft.com/en-us/library/ms173077.aspx

  9. Stisknutím klávesy F5 spusťte projekt. Když kliknete na Procházet, zobrazí se dialogové okno Otevřít, ve které můžete procházet wordový dokument, excelový list nebo powerpointovou prezentaci. Vyberte libovolný soubor a klikněte na Otevřít. Dokument se otevře uvnitř ovládacího prvku WebBrowser a zobrazí se okno se zprávou, která zobrazuje název serveru dokumentů Office.

Co je potřeba vzít v úvahu při použití ovládacího prvku WebBrowser

Při použití ovládacího prvku WebBrowser byste měli zvážit následující:

  • WebBrowser Ovládací prvek prochází dokumenty asynchronně. Při volání WebBrowser1.Navigate, volání vrátí řízení aplikace Visual C# před dokument byl zcela načten. Pokud plánujete automatizovat obsažený dokument, musíte použít událost NavigateComplete2 k oznámení po dokončení načítání dokumentu. Použití Document vlastnost WebBrowser objekt, který je předán získat odkaz na objekt dokumentu Office, který v předchozím kódu je nastavena na oDocument.

  • Ovládací prvek WebBrowser nepodporuje slučování nabídek.

  • V aplikaci Internet Explorer verze 5.0 a novější můžete zobrazit ukotvené panely nástrojů pomocí následujícího kódu:

     // 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);
    
  • Existuje několik známých problémů s více než jedním ovládacím prvkem WebBrowser v projektu a s načtením každého ovládacího prvku se stejným typem dokumentu Office (to znamená, že všechny wordové dokumenty nebo všechny excelové listy). Microsoft doporučuje používat pro každý projekt jenom jeden ovládací prvek a procházet jednotlivé dokumenty.

    Nejběžnějším problémem jsou panely příkazů Microsoft Office, které se zobrazují jako zakázané. Pokud máte dva ovládací prvky WebBrowser ve stejném formuláři, které jsou načteny do dokumentů aplikace Word, a pokud jste zobrazili panely nástrojů pomocí jedné z předchozích technik, je aktivní a funguje správně pouze jedna sada panelů nástrojů. Druhý je zakázán a nelze jej použít.

  • Chcete-li vymazat ovládací prvek WebBrowser jeho aktuální obsah v události Click jiného příkazového tlačítka (nebo na jiném vhodném místě v kódu), přejděte na výchozí prázdnou stránku pomocí následujícího kódu:

       AxWebBrowser1.Navigate("about:blank");
    

Co je potřeba zvážit při použití ovládacího prvku WebBrowser společně s aplikací Microsoft Office 2007

Ve výchozím nastavení aplikace Office 2007 neotevřou dokumenty Office ve webovém prohlížeči. Toto chování ovlivňuje také WebBrowser ovládacího prvku. Při vývoji aplikací, které otevírají dokumenty Office 2007, doporučujeme použít vlastní kontejner dokumentů ActiveX místo ovládacího prvku WebBrowser.

U stávajících aplikací, které vyžadují zpětnou kompatibilitu s ovládacím prvkem WebBrowser, můžete upravit registr tak, aby se nakonfiguruje aplikace Internet Explorer. Tuto metodu můžete použít ke konfiguraci aplikace Internet Explorer pro otevírání dokumentů systému Office 2007 ve webovém prohlížeči. Další informace získáte v následujícím článku znalostní báze Microsoft Knowledge Base:

927009 Při pokusu o zobrazení dokumentu aplikace Microsoft Office 2007 v aplikaci Windows Internet Explorer 7 se otevře nové okno

Poznámka

Pokud upravíte registr pomocí metody uvedené v článku znalostní báze Microsoft Knowledge Base 927009, změny ovlivní ovládací prvek WebBrowser, který používáte v aplikaci. Změny mají vliv také na všechny instance aplikace Internet Explorer. Tato metoda navíc nemusí fungovat pro žádné budoucí verze sad Microsoft Office. Proto doporučujeme použít tuto metodu pouze pro kompatibilitu s existující aplikací.

Odkazy

Další informace o použití ovládacího prvku WebBrowser získáte v následujících článcích znalostní báze Microsoft Knowledge Base:

  • 304562 Visual Studio 2005 a Visual Studio .NET neposkytují ovládací prvek kontejneru OLE pro model Windows Forms

  • 243058 Použití ovládacího prvku WebBrowser k otevření dokumentu Office

  • 927009 Při pokusu o zobrazení dokumentu aplikace Microsoft Office 2007 v aplikaci Windows Internet Explorer 7 se otevře nové okno