Office-asiakirjan avaaminen WebBrowser-ohjausobjektin avulla

Yhteenveto

Kun työskentelet Office-asiakirjojen parissa, saatat haluta näyttää asiakirjat suoraan Visual Basic -sovelluksessa, mutta et halua luoda upotettua OLE-objektia OLE-säilöohjausobjektin avulla. Sen sijaan haluat linkittää aiemmin luotuun asiakirjaan ja avata sen sijainnistaan ActiveX-asiakirjaobjektin avulla. Microsoftin WebBrowser-ohjausobjekti tarjoaa tähän ratkaisun.

Tässä artikkelissa esitellään, miten aiemmin luotuun Office-asiakirjaan siirrytään ja miten se näytetään Visual Basic -sovelluksen sisällä WebBrowser-ohjausobjektin avulla.

Enemmän tietoa

ActiveX-asiakirjat ovat upotettavia OLE-objekteja, jotka toimivat enemmän ActiveX-komponenttien kuin perinteisten OLE-objektien tavoin. Toisin kuin tavallista upotettua objektia, ActiveX-asiakirjaa ei ole suunniteltu suuremmassa asiakirjassa olevaksi objektiksi. Sen sijaan sitä pidetään kokonaisena asiakirjana, jota tarkastellaan katseluohjelman (kuten Internet Explorerin) avulla tai joka kerätään yksittäiseksi resurssiksi muiden asiakirjojen kanssa (kuten nidetiedosto).

Vaikka Microsoft Visual Basic ei tällä hetkellä tue ActiveX-asiakirjojen suoraa isännöintiä, voit kiertää tämän rajoituksen Internet Explorerin ja sen WebBrowser-ohjausobjektin ominaisuuksien avulla. WebBrowser-ohjausobjekti (Shdocvw.dll) on osa Internet Exploreria ja sitä voidaan käyttää vain järjestelmissä, joissa on Internet Explorer asennettuna.

Office-asiakirjoja avaavan Visual Basic -sovelluksen luominen

Seuraavien vaiheiden avulla voit luoda Office-asiakirjoja avaavan Visual Basic -sovelluksen:
  1. Käynnistä Visual Basic ja luo uusi Standard-projekti. Form1 luodaan oletusarvon mukaan.
  2. Avaa Components-valintaikkuna valitsemalla Project-valikosta Components. Lisää Components-valintaikkunassa Microsoft Common Dialog Control- ja Microsoft Internet Controls -viittaukset. Lisää kohteet objekteihin valitsemalla OK.
  3. Lisää Form1-projektiin WebBrowser- ja CommonDialog-ohjausobjektin sekä CommandButton-painikkeen esiintymä.
  4. Lisää sitten seuraava koodi Form1-projektin Code-ikkunaan:
    Option Explicit

    Dim oDocument As Object

    Private Sub Command1_Click()
    Dim sFileName As String

    ' Etsi Office-tiedosto...
    With CommonDialog1
    .FileName = ""
    .ShowOpen
    sFileName = .FileName
    End With

    ' Jos käyttäjä ei peruuttanut, avaa tiedosto...
    If Len(sFileName) Then
    Set oDocument = Nothing
    WebBrowser1.Navigate sFileName
    End If
    End Sub

    Private Sub Form_Load()
    Command1.Caption = "Selaa"
    With CommonDialog1
    .Filter = "Office-asiakirjat " & _
    "(*.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 "Tiedoston avasi: " & oDocument.Application.Name
    End Sub
  5. Suorita projekti painamalla F5-näppäintä. Kun napsautat Selaa-painiketta, Avaa-valintaikkuna tulee näyttöön. Tässä valintaikkunassa voit siirtyä Word-, Excel- tai PowerPoint-tiedostoon. Valitse Avaa, minkä jälkeen asiakirjan pitäisi avautua WebBrowser-ohjausobjektin sisällä. Tämän jälkeen näyttöön tulee sanomaruutu, jossa näkyy tiedoston avanneen Office-sovelluksen nimi.

WebBrowser-ohjausobjektin käyttämisen lisähuomautuksia

Ota seuraavat asiat huomioon, kun käytät WebBrowser-ohjausobjektia:
  • WebBrowser-ohjausobjekti siirtyy asiakirjoihin asynkronisesti. Tämä tarkoittaa sitä, että kun teet WebBrowser1.Navigate-kutsun, kutsu palauttaa hallinnan Visual Basic -sovellukseesi ennen kuin asiakirja on ladattu kokonaan. Jos aiot automatisoida sisälletyn asiakirjan, sinun on käytettävä NavigateComplete2-tapahtumaa selvittääksesi, milloin asiakirjan lataaminen on valmis. Hae Office-asiakirjaobjektin viittaus välitetyn WebBrowser-objektin Document-ominaisuuden avulla. Aiemmassa koodiesimerkissä asiakirjaobjektiksi on määritetty oDocument.
  • WebBrowser-ohjausobjekti ei tue valikkoyhdistämistä. Jos haluat asiakirjan valikkokohteiden näkyvän Visual Basic -valikon kanssa, sinun on käytettävä sen sijaan OLE-säilöohjausobjektia.
  • WebBrowser-ohjausobjekti piilottaa yleensä kaikki kiinnitetyt työkalurivit ennen Office-asiakirjan näyttämistä. Automaation avulla voit tuoda irrallisen työkalurivin näyttöön käyttämällä esimerkiksi seuraavanlaista koodia:
       With oDocument.Application.CommandBars("Standard")
    .Position = 4 '[msoBarFloating]
    .Visible = True
    End With
    Uudemmat Internet Explorerin versiot (5.0 ja uudemmat) antavat myös näyttää kiinnitetyt työkalurivit seuraavan koodin avulla:
     ' Tämä on vaihtoasetus, joten kutsu sitä kerran näyttääksesi
    ' työkalurivit ja kerran piilottaaksesi ne. Tämä toimii Internet Explorer 5:n kanssa,
    ' mutta ei usein toimi aiempien versioiden kanssa oikein...
    WebBrowser1.ExecWB OLECMDID_HIDETOOLBARS, OLECMDEXECOPT_DONTPROMPTUSER
  • Jos projektissa on useita WebBrowser-ohjausobjekteja ja kukin ohjausobjekti lataa saman Office-asiakirjatyypin (esimerkiksi kaikki lataavat Word-asiakirjoja tai Excel-laskentataulukoita), ilmenee joitakin tunnettuja ongelmia. Suositellaan, että käytät vain yhtä ohjausobjektia projektia kohti ja siirryt yhteen asiakirjaan kerrallaan.

    Yleisin ongelma on se, että Office-työkalurivit vaikuttavat poistetuilta käytöstä. Jos samassa lomakkeessa on kaksi WebBrowser-ohjausobjektia, jotka molemmat lataavat Word-asiakirjan, ja olet tuonut työkalurivit näyttöön käyttämällä jotakin edellä kuvatuista tavoista, vain yksi työkalurivijoukko on aktiivinen ja toimii oikein. Toinen työkalurivijoukko on poistettu käytöstä, eikä sitä voi käyttää.
  • Voit poistaa WebBrowser-ohjausobjektin nykyisen sisällön siirtymällä oletusarvoiseen tyhjään sivuun jonkin toisen komentopainikkeen napsautustapahtuman (tai jonkin muun sopivan koodin kohdan avulla) seuraavan koodin avulla:
       WebBrowser1.Navigate "about:blank"

Suositukset

Saat lisätietoja Visual Basicin WebBrowser-ohjausobjektista napsauttamalla seuraavia artikkelien numeroita, jolloin pääset lukemaan artikkelit Microsoft Knowledge Base -tietokannassa:

162719 Visual Basic 5.0:n WebBrowser-ohjausobjektin käyttäminen (tämä artikkeli saattaa olla englanninkielinen)

188271 Visual Basicin WebBrowser-ohjausobjektin sisällön tulostaminen (tämä artikkeli saattaa olla englanninkielinen)

191692 Ongelma: Shdocvw.dll ei sisälly PDW-asennuspakettiin (tämä artikkeli saattaa olla englanninkielinen)

238313 Ongelma: Internet Explorer -asiakirjaobjektimallin käyttäminen Visual Basicista (tämä artikkeli saattaa olla englanninkielinen)

Ominaisuudet

Artikkelin tunnus: 243058 – Viimeisin tarkistus: 30.3.2006 – Versio: 1

Palaute