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:
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.
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.
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.
Määritä yksityinen jäsen Form1-luokassa seuraavasti.
Dim oDocument as Object
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:
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.
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.
Lisää WebBrowser-ohjausobjektin, CommonDialog-ohjausobjektin ja CommandButtonin esiintymä Form1:een.
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ä