Office-asiakirjan avaaminen WebBrowser-ohjausobjektin avulla Visual Basicissa

Tämän artikkelin Microsoft Visual C# 2005 ja Microsoft Visual C# .NET -versio on artikkelissa 304662.

Yhteenveto

Haluat ehkä näyttää tai upottaa Microsoft Office -asiakirjan suoraan Microsoft Visual Basic -lomakkeessa. Microsoft Visual Basic 2005 ja Visual Basic .NET eivät sisällä OLE-ohjausobjektia, jonka avulla voit upottaa Office-asiakirjan lomakkeeseen. Jos haluat upottaa aiemmin luodun asiakirjan ja avata sen valmiina ActiveX-asiakirjaobjektina Visual Basic -lomakkeessa, voit halutessasi käyttää WebBrowser-ohjausobjektia.

Tässä artikkelissa näytetään, miten voit selata olemassa olevaa Office-asiakirjaa ja näyttää sen Visual Basic -lomakkeessa WebBrowser-ohjausobjektin avulla.

Lisätietoja

ActiveX-asiakirjat ovat upotettavia OLE-objekteja, jotka toimivat paremmin ActiveX-komponenttien kuin perinteisten OLE-objektien tavoin. Toisin kuin perinteisessä upotetussa objektissa, ActiveX-tiedostoa ei ole suunniteltu suuremman asiakirjan sisältämäksi objektiksi. Sitä pidetään sen sijaan täydellisenä asiakirjana, jota tarkastellaan (esimerkiksi Microsoft Internet Explorerilla) tai kerätään yhdessä resurssissa muiden asiakirjojen kanssa (kuten Microsoft Office -nitojatiedosto). WebBrowser-ohjausobjektissa isännöity ActiveX-tiedosto on aina aktiivinen. Toisin kuin perinteisissä upotetuissa OLE-objekteissa, aktivointia ei siis ole olemassa.

Vaikka Microsoft Visual Basic .NET ja Visual Basic 2005 eivät tällä hetkellä tue ActiveX-asiakirjojen isännöintiä suoraan, voit käyttää WebBrowser-ohjausobjektia tähän tarkoitukseen. WebBrowser-ohjausobjekti (Shdocvw.dll) on osa Internet Exploreria, ja sitä voi käyttää vain järjestelmissä, joihin on asennettu Internet Explorer.

Office-tiedostoja avaavan Visual Basic -sovelluksen luominen

Huomautus

Kun luot kahdella yllä olevalla menetelmällä Visual Basic -sovelluksen, joka avaa Office-asiakirjoja, sinun on muutettava koodia Visual Studio 2005:ssä. Visual Basic lisää oletusarvoisesti yhden lomakkeen projektiin, kun luot Windows Forms projektia. Lomakkeen nimi on Form1. Kaksi lomaketta edustavaa tiedostoa ovat nimeltään Form1.vb ja Form1.designer.vb. Kirjoitat koodin form1.vb:ssä. Form1.designer.vb-tiedostossa Windows Forms Designer kirjoittaa koodin, joka toteuttaa kaikki suorittamasi toiminnot vetämällä ja pudottamalla ohjausobjekteja Työkaluriviltä.

Kun Visual Basic -sovellus on luotu, suorita projekti painamalla F5-näppäintä. Kun valitset Selaa, näyttöön avautuu Avaa-valintaikkuna , jossa voit selata Word-, Excel- tai PowerPoint-tiedostoa. Valitse mikä tahansa tiedosto ja valitse Avaa. Asiakirja avautuu WebBrowser-ohjausobjektin sisään, ja näyttöön tulee sanomaruutu, jossa näkyy Office-asiakirjapalvelimen nimi

Tapa 1:

  1. Luo Microsoft Visual Studio 2005:ssä tai Microsoft Visual Studio .NET:ssä Windows-sovellusprojekti Visual Basic 2005:n tai Visual Basic .NET:n avulla. Form1 luodaan oletusarvoisesti.

  2. Avaa Työkalut-valintaikkuna valitsemalla Työkalut-valikostaMukauta työkaluriviä. Lisää COM-komponentit-välilehdessä viittaus Microsoft WebBrowseriin. Lisää WebBrowser-ohjausobjekti Windows Forms työkaluriville valitsemalla OK. WebBrowser-ohjausobjekti tulee näkyviin, kun työkalurivillä on tekstinhallinta .

    Huomautus Visual Studio 2005:ssä ei tarvitse tehdä vaihetta 2.

  3. Lisää Toolboxin avulla WebBrowser-ohjausobjekti, OpenFileDialog-ohjausobjekti ja Painike-ohjausobjekti Form1:een. Tämä vaihe lisää AxWebBrowser1-jäsenmuuttujan, OpenFileDialog1-jäsenmuuttujan ja Button1-jäsenmuuttujan Form1-luokkaan.

  4. Määritä yksityinen jäsen Form1-luokassa seuraavasti.

    Dim oDocument as Object
    
  5. Liitä seuraava koodi Form1-luokkaan.

    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
    

Tapa 2:

  1. Luo Microsoft Visual Studio 2005:ssä tai Microsoft Visual Studio .NET:ssä Windows-sovellusprojekti Visual Basic 2005:n tai Visual Basic .NET:n avulla. Form1 luodaan oletusarvoisesti.

  2. Avaa Komponentit-valintaikkuna valitsemalla Projekti-valikosta Osat. Lisää Osat-valintaikkunaan viittauksia Microsoft Common Dialog Control - ja Microsoft Internet Controls -ohjausobjekteihin. Lisää kohteet työkaluriville valitsemalla OK.

  3. Lisää WebBrowser-ohjausobjektin, CommonDialog-ohjausobjektin ja CommandButtonin esiintymä Form1:een.

  4. Lisää seuraavaksi seuraava koodi Form1:n Koodi-ikkunaan:

    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
    

Huomioitavaa WebBrowser-ohjausobjektin käytössä

Ota huomioon seuraavat asiat, kun käytät WebBrowser-ohjausobjektia:

  • WebBrowser-ohjausobjekti selaa tiedostoihin asynkronisesti. Kun kutsut WebBrowser1.Navigate-kutsua, kutsu palauttaa ohjausobjektin Visual Basic -sovellukseesi, ennen kuin asiakirja on ladattu kokonaan. Jos aiot automatisoida sisällytetyn asiakirjan, sinun on käytettävä NavigateComplete2-tapahtumaa, jotta saat ilmoituksen, kun asiakirjan lataaminen on päättynyt. Käytä välitetyn WebBrowser-objektin Document-ominaisuutta saadaksesi viittauksen Office-asiakirjaobjektiin, jonka edellisessä koodissa on määritetty arvoksi oDocument.

  • WebBrowser-ohjausobjekti ei tue valikoiden yhdistämistä.

  • WebBrowser-ohjausobjekti piilottaa yleensä kiinnitetyt työkalurivit ennen Office-asiakirjan näyttämistä. Automaation avulla voit näyttää irrallisen työkalurivin käyttämällä koodia, kuten seuraavaa.

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

    Internet Explorerin uudemmissa versioissa (5.0 ja uudemmissa versioissa) voit myös näyttää kiinnitetyt työkalurivit seuraavan koodin avulla.

    ' 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)
    
  • Projektissa on useita tunnettuja ongelmia, jotka liittyvät useampaan kuin yhteen WebBrowser-ohjausobjektiin ja siihen, että jokaiseen ohjausobjektiin ladataan samantyyppinen Office-asiakirja (eli kaikki Word-asiakirjat tai kaikki Excel-laskentataulukot). On suositeltavaa, että käytät vain yhtä ohjausobjektia projektia kohden ja selaat yhteen asiakirjaan kerrallaan.

    Yleisin ongelma on Officen komentopalkit, jotka näkyvät poissa käytöstä. Jos sinulla on kaksi WebBrowser-ohjausobjektia samassa lomakkeessa, jotka molemmat on ladattu Word-tiedostoilla, ja olet osoittanut työkalurivit jollakin edellä olevista tekniikoista, vain yksi työkalurivijoukko on aktiivinen ja toimii oikein. Toinen on poistettu käytöstä, eikä sitä voi käyttää.

  • Jos haluat tyhjentää WebBrowserin nykyisen sisällön, siirry napsautustapahtumassa toisen komentopainikkeen kohtaan (tai muuhun sopivaan kohtaan koodissasi) oletus tyhjälle sivulle käyttämällä seuraavaa koodia:

       AxWebBrowser1.Navigate("about:blank")
    

Huomioitavaa, kun käytät WebBrowser-ohjausobjektia yhdessä 2007 Microsoft Office -ohjelman kanssa

2007 Office -ohjelmat eivät oletusarvoisesti avaa Office-tiedostoja selaimessa. Tämä toiminta vaikuttaa myös WebBrowser-ohjausobjektiin. Suosittelemme, että käytät mukautettua ActiveX-tiedostosäilöä WebBrowser-ohjausobjektin sijaan, kun kehität sovelluksia, jotka avaavat 2007 Office-tiedostoja.

Aiemmin luoduissa sovelluksissa, jotka edellyttävät yhteensopivuutta WebBrowser-ohjausobjektin kanssa, voit määrittää Internet Explorerin muokkaamalla rekisteriä. Tämän menetelmän avulla voit määrittää Internet Explorerin avaamaan 2007 Office-tiedostoja selaimessa. Saat lisätietoja napsauttamalla seuraavaa artikkelin numeroa, jotta voit tarkastella artikkelia Microsoft Knowledge Base -joukossa:

927009 Uusi ikkuna avautuu, kun yrität tarkastella 2007 Microsoft Office -ohjelman asiakirjaa Windows Internet Explorer 7:ssä

Huomautus Jos muokkaat rekisteriä käyttämällä Knowledge Base -artikkelissa mainittua menetelmää 927009, muutokset vaikuttavat WebBrowser-ohjausobjektiin, jota käytät sovelluksessa. Muutokset vaikuttavat myös kaikkiin Internet Explorerin esiintymiin. Lisäksi tämä menetelmä ei välttämättä toimi Microsoft Office -ohjelmistoohjelmistojen tulevissa versioissa. Siksi suosittelemme, että käytät tätä menetelmää vain yhteensopivuuteen olemassa olevan sovelluksen kanssa.

Lisätietoja

Saat lisätietoja WebBrowser-ohjausobjektin käytöstä napsauttamalla seuraavia microsoft Knowledge Base -artikkelinumeroita:

304562 Visual Studio 2005 ja Visual Studio .NET eivät tarjoa OLE-säilön ohjausobjektia Windows Forms

927009 Uusi ikkuna avautuu, kun yrität tarkastella 2007 Microsoft Office -ohjelman asiakirjaa Windows Internet Explorer 7:ssä