Come usare il controllo WebBrowser in Visual Basic per aprire un documento di Office

Per una versione di Microsoft Visual C# 2005 e Microsoft Visual C# .NET di questo articolo, vedere 304662.

Riepilogo

È possibile visualizzare o incorporare un documento di Microsoft Office direttamente in un modulo di Microsoft Visual Basic. Microsoft Visual Basic 2005 e Visual Basic .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 all'interno di una maschera di Visual Basic, una possibile soluzione consiste nell'usare il controllo WebBrowser.

Questo articolo illustra come passare a un documento di Office esistente e visualizzarlo in un modulo di Visual Basic 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 Microsoft Visual Basic .NET e Visual Basic 2005 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 Basic che apre i documenti di Office

Nota

Quando si usano due metodi precedenti per creare un'applicazione Visual Basic che apre documenti di Office, è necessario modificare il codice in Visual Studio 2005. Per impostazione predefinita, Visual Basic aggiunge una maschera al progetto quando si crea un progetto Windows Forms. Il modulo è denominato Form1. I due file che rappresentano il form sono denominati Form1.vb e Form1.designer.vb. Il codice viene scritto in Form1.vb. Nel file Form1.designer.vb il Windows Forms Designer scrive il codice che implementa tutte le azioni eseguite trascinando ed eliminando i controlli dalla casella degli strumenti.

Dopo aver creato l'applicazione Visual Basic, 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 file di Word, Excel o PowerPoint. Selezionare un file qualsiasi e 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

Metodo 1

  1. In Microsoft Visual Studio 2005 o in Microsoft Visual Studio .NET creare un progetto di applicazione Windows usando Visual Basic 2005 o Visual Basic .NET. Form1 viene creato per impostazione predefinita.

  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 Button a Form1. Questo passaggio aggiunge la variabile membro AxWebBrowser1, la variabile membro OpenFileDialog1 e la variabile membro Button1 alla classe Form1.

  4. Definire un membro privato nella classe Form1 come indicato di seguito.

    Dim oDocument as Object
    
  5. Incollare il codice seguente nella classe Form1.

    Private Sub Button1_Click(ByVal sender As System.Object, _
       ByVal e As System.EventArgs) Handles Button1.Click
    
    Dim strFileName As String
    
    'Find the Office document.
        With OpenFileDialog1
            .FileName = ""
            .ShowDialog()
            strFileName = .FileName
        End With
    
    'If the user does not cancel, open the document.
        If strFileName.Length Then
            oDocument = Nothing
            AxWebBrowser1.Navigate(strFileName)
        End If
    
    End Sub
    
    Private Sub Form1_Load(ByVal sender As Object, ByVal e As _
       System.EventArgs) Handles MyBase.Load
    
    Button1.Text = "Browse"
    
    With OpenFileDialog1
            .Filter = "Office Documents " & _
            "(*.doc, *.xls, *.ppt)|*.doc;*.xls;*.ppt"
            .FilterIndex = 1
        End With
    
    End Sub
    
    Private Sub Form1_Closing(ByVal sender As Object, ByVal e As _
       System.ComponentModel.CancelEventArgs) Handles MyBase.Closing
    
    oDocument = Nothing
    
    End Sub
    
    Private Sub AxWebBrowser1_NavigateComplete2(ByVal sender As Object, _
       ByVal e As AxSHDocVw.DWebBrowserEvents2_NavigateComplete2Event) _
       Handles AxWebBrowser1.NavigateComplete2
    
    On Error Resume Next
    
    oDocument = e.pDisp.Document
    
    'Note: You can use the reference to the document object to
        '      automate the document server.
        MsgBox("File opened by: " & oDocument.Application.Name)
    
    End Sub
    

Metodo 2

  1. In Microsoft Visual Studio 2005 o in Microsoft Visual Studio .NET creare un progetto di applicazione Windows usando Visual Basic 2005 o Visual Basic .NET. Form1 viene creato per impostazione predefinita.

  2. Dal menu Progetto selezionare Componenti per aprire la finestra di dialogo Componenti. Nella finestra di dialogo Componenti aggiungere riferimenti a Microsoft Common Dialog Control e a Microsoft Internet Controls. Fare clic su OK per aggiungere gli elementi alla casella degli strumenti.

  3. Aggiungere un'istanza del controllo WebBrowser, il controllo CommonDialog e un controllo CommandButton a Form1.

  4. Aggiungere quindi il codice seguente nella finestra Codice per 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"
       ' For the 2007 Microsoft Office documents, change the .Filter parameter of the 
       ' With CommonDialog1 statement to:
       ' .Filter = "Office Documents " & _
       '      "(*.docx, *.xlsx, *.pptx)|*.docx;*.xlsx;*.pptx"
       With CommonDialog1
          .Filter = "Office Documents " & _
          "(*.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
    

Considerazioni sull'uso del 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 Basic prima che il documento sia stato completamente caricato. 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.

  • Il controllo WebBrowser nasconde in genere tutte le barre degli strumenti ancorate prima di visualizzare un documento di Office. È possibile usare Automazione per visualizzare una barra degli strumenti mobile usando codice come il seguente.

    With oDocument.Application.CommandBars("Standard")
       .Position = 4 '[msoBarFloating]
       .Visible = True
    End With
    
    

    Le versioni più recenti di Internet Explorer (5.0 e versioni successive) consentono anche di 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...
    AxWebBrowser1.ExecWB(SHDocVw.OLECMDID.OLECMDID_HIDETOOLBARS, SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_DONTPROMPTUSER)
    
  • 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 calcolo di Excel. È consigliabile usare un solo controllo per progetto e passare a un documento alla volta.

    Il problema più comune riguarda le barre dei comandi di Office, che vengono visualizzate disabilitate. Se nello stesso modulo sono presenti due controlli WebBrowser, entrambi caricati con documenti di Word e 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 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")
    

Considerazioni sull'uso del 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 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 su come usare il 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

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