Come usare il controllo WebBrowser per aprire documenti di Office in Visual C# 2005 o in Visual C# .NET

Per una versione di Microsoft Visual Basic .NET di questo articolo, vedere 304643.

Riepilogo

È possibile visualizzare o incorporare un documento di Microsoft Office direttamente in un modulo di Microsoft Visual C#. Microsoft Visual C# 2005 e Microsoft Visual C# .NET non forniscono un controllo OLE che consente di incorporare un documento di Office in un modulo. Se si desidera incorporare un documento esistente e aprirlo come oggetto documento ActiveX sul posto in un modulo Visual C#, è possibile usare il controllo Microsoft WebBrowser.

Questo articolo illustra come passare a un documento di Office esistente e come visualizzarlo all'interno di un modulo di Visual C# usando il controllo WebBrowser.

Ulteriori informazioni

I documenti ActiveX sono oggetti OLE incorporabili che si comportano in modo più simile ai controlli ActiveX rispetto agli oggetti OLE tradizionali. A differenza di un oggetto incorporato tradizionale, un documento ActiveX non è progettato per essere un oggetto contenuto in un documento più grande. Al contrario, è considerato di per sé un documento completo che viene semplicemente visualizzato (ad esempio con Microsoft Internet Explorer) o raccolto in una singola risorsa con altri documenti (ad esempio un file binder di Microsoft Office). Un documento ActiveX ospitato nel controllo WebBrowser è sempre attivo; Pertanto, a differenza degli oggetti ole incorporati tradizionali, non esiste alcun senso di attivazione sul posto.

Anche se Visual C# 2005 e Visual C# .NET attualmente non supportano l'hosting diretto di documenti ActiveX, è possibile usare il controllo WebBrowser a questo scopo. Il controllo WebBrowser (Shdocvw.dll) fa parte di Internet Explorer e può essere usato solo nei sistemi in cui è installato Internet Explorer.

Creazione di un'applicazione Visual C# che apre i documenti di Office

Per creare un'applicazione Visual C# che apre i documenti di Office, seguire questa procedura:

  1. Creare un nuovo progetto applicazione Windows in Visual C# 2005 o in Visual C# .NET. Form1 viene creato per impostazione predefinita.

    Nota In Visual C# 2005, se non è possibile trovare il file SHDocVw.dll o il file AxSHDocVw.dll, eseguire il comando seguente al prompt dei comandi di Visual Studio:

    aximp %WINDIR%\system32\shdocvw.dll
    

    Creare quindi un proxy common language runtime (SHDocVw.dll) e un proxy Windows Forms (AxSHDocVw.dll) per il controllo Microsoft Web Browser. Per aggiungere i file DLL in Visual C# 2005, seguire questa procedura:

    1. Scegliere Aggiungi riferimento dal menu Progetto.
    2. Nella finestra di dialogo Aggiungi riferimento fare clic su Sfoglia.
    3. Individuare e quindi selezionare il file AxSHDocVw.dll e il file SHDocVw.dll.
    4. Per aggiungere riferimenti al progetto per questi due file, fare clic su OK.
  2. Scegliere Personalizza toolBox dal menu Strumenti per aprire la finestra di dialogo Personalizza casella degli strumenti. Nella scheda Componenti COM aggiungere un riferimento a Microsoft WebBrowser. Fare clic su OK per aggiungere il controllo WebBrowser alla casella degli strumenti Windows Forms. Il controllo WebBrowser viene visualizzato con Esplora testo nella casella degli strumenti.

    Nota In Visual Studio 2005 non è necessario eseguire il passaggio 2.

  3. Usando la casella degli strumenti, aggiungere un controllo WebBrowser, un controllo OpenFileDialog e un controllo CommandButton a Form1. Le variabili membro AxWebBrowser1, OpenFileDialog1 e Button1 vengono aggiunte alla classe Form1. In Visual C# 2005 vengono aggiunte le variabili membro webBrowser1, openFileDialog1 e button1.

  4. In Form1 fare doppio clic su Button1. In questo modo l'evento Button1_Click viene aggiunto a Form1.

  5. Nella finestra del codice per Form1 aggiungere lo spazio dei nomi seguente all'elenco:

    using System.Reflection;
    
  6. Definire un membro privato nella classe Form1 come segue:

    private Object oDocument;
    
  7. Alla fine del metodo InitializeComponent della classe Form1, aggiungere il codice seguente per gestire gli eventi Form1_Load, Form1_Closed e 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. Sostituire il codice seguente

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

    Con:

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

    Nota È necessario modificare il codice in Visual Studio 2005. Per impostazione predefinita, Visual C# aggiunge una maschera al progetto quando si crea un progetto Windows Forms. Il modulo è denominato Form1. I due file che rappresentano il modulo sono denominati Form1.cs e Form1.designer.cs. Il codice viene scritto in Form1.cs. Nel file Form1.designer.cs il Windows Forms Designer scrive il codice che implementa tutte le azioni eseguite trascinando ed eliminando i controlli dalla casella degli strumenti.

    Per altre informazioni su Progettazione Windows Forms in Visual C# 2005, visitare il seguente sito Web Microsoft Developer Network (MSDN):https://msdn.microsoft.com/en-us/library/ms173077.aspx

  9. Premere F5 per eseguire il progetto. Quando si fa clic su Sfoglia, viene visualizzata la finestra di dialogo Apri che consente di passare a un documento di Word, a un foglio di lavoro di Excel o a una presentazione di PowerPoint. Selezionare un file qualsiasi e quindi fare clic su Apri. Il documento viene aperto all'interno del controllo WebBrowser e viene visualizzata una finestra di messaggio che visualizza il nome del server documenti di Office.

Cosa considerare quando si usa il controllo WebBrowser

Quando si usa il controllo WebBrowser, è consigliabile considerare quanto segue:

  • Il controllo WebBrowser passa ai documenti in modo asincrono. Quando si chiama WebBrowser1.Navigate, la chiamata restituisce il controllo all'applicazione Visual C# prima del caricamento completo del documento. Se si prevede di automatizzare il documento contenuto, è necessario usare l'evento NavigateComplete2 per ricevere una notifica al termine del caricamento del documento. Utilizzare la proprietà Document dell'oggetto WebBrowser passato per ottenere un riferimento all'oggetto documento di Office, che nel codice precedente è impostato su oDocument.

  • Il controllo WebBrowser non supporta l'unione di menu.

  • In Internet Explorer versioni 5.0 e successive è possibile visualizzare le barre degli strumenti ancorate usando il codice seguente:

     // 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);
    
  • Esistono diversi problemi noti relativi all'uso di più controlli WebBrowser in un progetto e al caricamento di ogni controllo con lo stesso tipo di documento di Office, ovvero tutti i documenti di Word o tutti i fogli di lavoro di Excel. Microsoft consiglia di usare un solo controllo per ogni progetto e di passare a un documento alla volta.

    Il problema più comune riguarda le barre dei comandi di Microsoft Office, che vengono visualizzate disabilitate. Se nello stesso modulo sono presenti due controlli WebBrowser, entrambi caricati con documenti di Word, e se sono state visualizzate barre degli strumenti usando una delle tecniche precedenti, solo un set di barre degli strumenti è attivo e funziona correttamente. L'altro è disabilitato e non può essere usato.

  • Per cancellare il controllo WebBrowser dal contenuto corrente, nell'evento Click di un altro pulsante di comando (o in un'altra posizione appropriata nel codice) passare alla pagina vuota predefinita usando il codice seguente:

       AxWebBrowser1.Navigate("about:blank");
    

Cosa considerare quando si usa il controllo WebBrowser insieme a un programma di Microsoft Office 2007

Per impostazione predefinita, le applicazioni di Office 2007 non aprono i documenti di Office nel Web browser. Questo comportamento influisce anche sul controllo WebBrowser. È consigliabile usare un contenitore di documenti ActiveX personalizzato anziché il controllo WebBrowser quando si sviluppano applicazioni che aprono documenti di Office 2007.

Per le applicazioni esistenti che richiedono la compatibilità con le versioni precedenti con il controllo WebBrowser, è possibile modificare il Registro di sistema per configurare Internet Explorer. È possibile usare questo metodo per configurare Internet Explorer per aprire i documenti di Office 2007 nel Web browser. Per altre informazioni, fare clic sul numero dell'articolo seguente per visualizzare l'articolo della Microsoft Knowledge Base:

927009 Viene visualizzata una nuova finestra quando si tenta di visualizzare un documento dell'applicazione di Microsoft Office 2007 in Windows Internet Explorer 7

Nota

Se si modifica il Registro di sistema usando il metodo indicato nell'articolo della Microsoft Knowledge Base 927009, le modifiche influiscono sul controllo WebBrowser usato nell'applicazione. Le modifiche influiscono anche su tutte le istanze di Internet Explorer. Inoltre, questo metodo potrebbe non funzionare per le versioni future delle famiglie di prodotti Microsoft Office. Pertanto, è consigliabile usare questo metodo solo per la compatibilità con un'applicazione esistente.

Riferimenti

Per altre informazioni sull'uso del controllo WebBrowser, fare clic sui numeri degli articoli seguenti per visualizzare gli articoli della Microsoft Knowledge Base:

  • 304562 Visual Studio 2005 e Visual Studio .NET non forniscono un controllo contenitore OLE per Windows Forms

  • 243058 Come usare il controllo WebBrowser per aprire un documento di Office

  • 927009 Viene visualizzata una nuova finestra quando si tenta di visualizzare un documento dell'applicazione di Microsoft Office 2007 in Windows Internet Explorer 7