Kako v Excelu sprogramirati spletni brskalnik

V sestavku o programiranju v Excel-u bom opisal, kako napisati svoj lastni internetni brskalnik. Seveda se takoj vprašamo, zakaj se tega sploh lotiti, saj je na trgu množica odličnih brezplačnih brskalnikov. Prvi odgovor je zato ker lahko, drugi pa možnost prilagoditve brskalnika za lastne potrebe.

Ker vemo, da se pisanja brskalnikov lotevajo velike ekipe programerjev, ki se s tem ukvarjajo več let, se postavlja vprašanje, ali smo temu izzivu sploh dorasli? Na našo srečo in zahvaljujoč Microsoft-u je odgovor pritrdilen. Microsoft je dal vesoljnemu programerskemu svetu na razpolago svoj Internet Explorer v obliki ActiveX komponente. V resnici bomo samo oblekli Internet Explorer v svojo aplikacijo (seveda pa lahko sorodnikom in znancem, ki bodo spremljali naš dosežek z vzkliki občudovanja to zamolčimo 😉).

Priprava okolja

Programerji se, podobno kot pisatelji, ob začetku projekta srečujemo s prazno stranjo, ki nas srepo gleda v oči. Manj pogumni v tem primeru hitro pogledajo, če se v zadnjih dveh minutah slučajno dobili pomembno elektronsko pošto ali, če se je kje drugje na internetu zgodilo kaj življensko pomembnega. Ker pa spadamo med neustrašne, se s sovražnikom soočimo iz oči v oči. Med programerji je že od nekdaj znana metoda "deli in vladaj" (očitno je bil tudi Julij Cezar programer). Zastrašujoč problem programiranja spletnega brskalnika bom razdelili na manjše, lažje obvladljive korake.

Prva odločitev, ki smo jo sprejeli, je izbira MS Excel-a kot razvojnega orodja. V Excelu je sicer težje napisati brskalnik kot v nekaterih drugih okoljih, vendar je nadaljna obdelava podatkov precej lažja. Poleg tega je Excel pogosto že na razpolago na računalniku, za ostala orodja pa se moramo bolj potruditi. Izbrati moramo še format datoteke. Ta odločitev je pomembna, ker je Microsoft v verziji Office-a 2007 spremenil format datotek. Odločiti se moramo, ali bo naš brskalnik deloval v Excelu od verzije 2000 navzgor, ali le od verzije 2007. Če želimo brskalnik uporabljati od verzije 2000 do 2013 je edini sprejemljivi format datoteke xls. Ker v tem formatu ne moremo delati z zavihki (RibbonX), sem se sam odločil za verzijo od 2007 dalje.

Začnemo z odpiranjem praznega direktorija (mape), ki sem ga sam poimenoval "xls_IE". Odpremo Excel in na ta direktorij shranimo prazen delovni zvezek z imenom "brskalnik.xlsm". Sami lahko izberete tudi drugačno ime, nujno je le, da ga shranite kot excelov delovni zvezek z omogočenimi makri. Za delo z makri bomo v Excelu potrebovali zavihek "Razvijalec", zato ga (v primeru, da še ni) omogočimo, tako, da kliknemo na okrogli gumb (v Excelu 2007) oziroma na zavihek "Datoteke" (v Excelu 2010 in 2013)

Gumb Pisarna

Na spodnjem delu okna je gumb "Excelove možnosti", ki ga kliknemo:

Meni pisarne

Na oknu, ki se odpre odkljukajte možnost "V traku prikaži jeziček »Razvijalec«"

Excelove možnosti

Predlagam tudi, da kar takoj naredite varnostno kopijo projekta, lahko na strežnik ali USB ključek, saj nesreča nikoli ne počiva (si predstavljate pod kakšnim stresom mora biti ta uboga Nesreča).

Oblikovanje uporabniškega vmesnika

Izberemo zavihek "Razvijalec" in na njem gumb "Visual Basic":

Zavihek razvijalec

Odpre se nam okolje za pisanje VBA programov, t.i. VBIDE. Kreirali bomo okno, v katerem bo deloval naš brskalnik. V oknu "Project Explorer" klinemo z desnim gumbom miške in v meniju, ki se pojavi, izberemo "Insert >> UserForm":

Projektni raziskovalec

Okno poimenujemo "FBrskalnik", kot naslov okna pa vnesemo "Spletni brskalnik":

lastnosti

Ker okna, ki so naravno dosegljiva v Excelu, ne omogočajo spreminjanja velikosti z miško, bomo dodali še dva gumbka, s katerima bo možno spremeniti velikost okna. Vse komponente, ki jim ne želimo spreminjati velikosti skupaj z oknom, bomo postavili na zgornji del obrazca, v spodnjem delu pa bo samo spletni brskalnik, ki bo spreminjal svojo velikost v skladu s premembo velikosti samega okna. Izgled končnega obrazca:

Načrt obrazca

Predenj narišemo posamezne komponente na okno, potrebujemo internetni brskalnik. Če je Internet Explorer instaliran in registriran na našem računalniku, moramo samo še pripeljati komponento v Excel. Na okno s komponentami kliknemo z desnim gumbom miške in izberemo "Additional Controls":

Dodatne Kontrole

Odpre se nam spodnje okno, v katerem izberemo komponento Microsoft Web Browser.

Dodatne Kontrole Izbira

V oknu s kontrolami se nam pojavi ikona globusa, ki prestavlja naš brskalnik.


Da nekoliko skrajšam celotno zgodbo, ne bom razlagal posameznih korakov, temveč bom samo naštel
vrste in lastnosti posameznih komponent. V sliki končnega obrazca sem oštevilčil posamezne komponente,
kar bom sedaj uporabil pri pripravi seznama:
1 - okno brskalnika  (UserForm)
	(Name)		FBrskalnik
	Caption		Spletni brskalnik
	Height		460
	Width		645
2 - gumb za navigacijo na predhodno obiskano internetno stran (CommandButton)
	(Name)		gumbNazaj
	Caption		<
	Height		18
	Left		6
	Top		4
	Width		18
3 - gumb za navigacijo za naslednjo internetno stran (na seznamu obiskanih) (CommandButton)
	(Name)		gumbNaprej
	Caption		>
	Height		18
	Left		30
	Top		4
	Width		18
4 - polje za vnos internetnega naslova (TextBox)
	(Name)		besURL
	Height		18
	Left		54
	Text		www.google.si
	Top		4
	Width		540
5 - gumb za navigacijo na stran, ki smo jo vnesli v polje za vnos naslova (CommandButton)
	(Name)		gumbPojdi
	Caption		Pojdi
	Height		18
	Left		60
	Top		4
	Width		36
6 - statusna vrstica (TextBox) - običajno se nahaja na spodnjem robu okna, tokrat smo si poenostavili
     programiranje na škodo standardnega uporabniškega vmesnika.
	(Name)		Status
	Height		18
	Left		6
	Text		
	Top		24
	Width		576
7 - gumb za zmanjšanje okna brskalnika (CommandButton)
	(Name)		gumbZmanjsaj
	Caption		-
	Height		18
	Left		588
	Top		24
	Width		18
8 - gumb za povečanje okna brskalnika (CommandButton)
	(Name)		gumbPovecaj
	Caption		+
	Height		18
	Left		612
	Top		24
	Width		18
9 - ActiveX kombonenta spletnega brskalnika (WebBrowser)
	 (Name)		wbBrskalnik
	Height		384
	Left		6
	Top		48
	Width		630

	

Definicija akcij oz. dogodkov ob klikih gumbkov in spremembah v brskalniku

Za vsak gumbek je potrebno določiti podprogram, ki se sproži ob kliku nanj. Za začetek začnemo z uvozom definicij vmesnika za HTML dokument. To naredimo tako, da v meniju "Tools" izberemo postavko "References...", kar nam odpre okno za upravljanje z referencami. Na seznamu izberemo "MIcrosoft HTML Object Library" in odkljukamo:

ReferencesVBAProject

Sedaj smo pripravljeni za spopad s kodo. Kliknemo na ikono "View Code":

PoglejKodo

In vnesemo spodnjo kodo v okno:

    

			Option Explicit
			Public wb As WebBrowser
			Public WithEvents HTML As HTMLDocument

			Private Sub gumbNaprej_Click()
			  ' Premaknemo se na naslednjo stran v seznamu že obiskanih
			  wb.GoForward
			End Sub

			Private Sub gumbNazaj_Click()
			  ' Vrnemo se na prejšnjo stran
			  wb.GoBack
			End Sub

			Private Sub gumbPovecaj_Click()
			  ' Povecamo širino in višino okna 10 pikslov. Istocasno prilagodimo tudi
			  ' velikost brskalnika. Ce je širina okna vecja od 1000 pikslov ignoriramo ukaz
			  If Me.Width < 1000 Then
				Me.Width = Me.Width + 10
				Me.Height = Me.Height + 10
				Me.wbBrskalnik.Width = Me.wbBrskalnik.Width + 10
				Me.wbBrskalnik.Height = Me.wbBrskalnik.Height + 10
			  End If
			End Sub

			Private Sub gumbZmanjsaj_Click()
			  ' Zmanjšamo istocasno širino in višino okna ter brskalnika za 10 pikslov
			  ' Ker ostale kontrole pustimo pri miru ne pustimo okna zmanjšati pod 645 pikslov.
			  If Me.Width > 645 Then
				Me.Width = Me.Width - 10
				Me.Height = Me.Height - 10
				Me.wbBrskalnik.Width = Me.wbBrskalnik.Width - 10
				Me.wbBrskalnik.Height = Me.wbBrskalnik.Height - 10
			  End If
			End Sub

			Private Sub UserForm_Initialize()
			  ' Zacetne nastavitve programa: inicializiramo spremenljivko wb, kjer bo
			  ' shranjena povezava na naš brskalnik. Brskalniku povemo, naj nam ne javlja
			  ' napak v skriptih ter odpremo zacetno stran
			  Set wb = Me.wbBrskalnik
			  wb.Silent = True
			  wb.Navigate besURL.Value
			End Sub

			Private Sub gumbPojdi_Click()
			  ' Odpremo stran, ki smo jo vnesli v vnosno poslje
			  wb.Navigate besURL.Value
			End Sub

			Private Sub wbBrskalnik_DocumentComplete(ByVal pDisp As Object, URL As Variant)
			  ' Ko je prikaz dokumenta v oknu zakljucen, ga prepišemo v spremenljivko
			  ' HTML za nadaljno obdelavo
			  Set HTML = wb.Document
			End Sub

			Private Sub wbBrskalnik_NavigateComplete2(ByVal pDisp As Object, URL As Variant)
			  ' Ce smo kliknili na povezavo, po premiku na novo stran naslov te strani
			  ' zapišemo v vnosno polje
			  besURL.Value = URL
			End Sub

			Private Sub wbBrskalnik_StatusTextChange(ByVal Text As String)
			  ' Sporocila, ki nam jih posreduje brskalnik, zapišemo v statusno polje
			  Status.Value = Text
			End Sub

    
	

S tem smo dobili solidno osnovo za naš brskalnik, ki ga lahko uporabimo za zajeme podatkov z interneta.