Egy kedves Olvasóm építget egy kis Exceles dashboardot, amelybe szeretne egy egyszerű időjárásos szekciót beépíteni, úgyhogy a következő posztban bemutatok egy ilyen, automatikusan frissülő adatokkal operáló megoldást. Amúgy ez az igény hasonló a legtöbb Exceles feladathoz - nem csak egyetlen megoldás létezik: jelen esetben például nyugodtan fordulhatunk a Power BI-hoz, de VBA-ból is leprogramozhatunk néhány soros kóddal egy ilyen frissülést, a mai poszt viszont kizárólag Excelből fog operálni.
Első körben válasszuk ki, hogy melyik oldalról akarjuk beemelni az időjárási adatainkat, fontos, hogy az adott szolgáltató elérhetővé tegye xml formátumban (rssként) is az előrejelzését. Én most a köpönyeg.hu-t választom, ahol szimplán csak az rss-ikonra kattintok a jobb felső sarokban az oldalon:
Valami ilyesmit fogunk látni:
Megfogom a böngésző címsorából az elérhetőséget és vágólapra helyezem:
Ezután az Excel Data ribbonfülén a Get External szekcióban a From Web opciót válasszuk, majd a felugró ablakban adjuk meg az RSS-elérhetőségünket:
Helyezzük egy üres munkalapunk valamelyik cellájára:
Látható, hogy meg is érkeztek a később már automatikusan is frissíthető adataink:
Innentől kezdve pedig már csak be kell hivatkozni a megfelelő cellát a dashboardunk megfelelő részéhez és olyanra formázni, amilyenre szeretnénk. De ez volt egyébként a létező legegyszerűbb megoldás, ennél egy fokkal hatékonyabb és szebb megoldás a Webservice formula használata. Ezt a következőképp tudjuk megcsinálni.
Elsőként illesszük be az xml-es rss linkünket egy cellába a munkalapon:
Ezután egy másik cellába nyerjük ki a linkről az adatokat a WEBSERVICE nevű formula segítségével:
=WEBSERVICE(A1)
A Webservice-formula a webről hoz be nekünk adatokat a paramétereként megadott URL alapján és azonnal látható is lesz, hogy abban a cellában, ahova a fenti formulát beírtuk, meg fog jelenni az xml tartalma.
Már ebből is lehet hegesztgetni, hogy kinyerjük az adatokat, de a Webservice-függvény általában kéz a kézben jár a FILTERXML formulával, ami egy XML-tartalomból ad nekünk vissza meghatározott adatot a második paramétereként megadott XPath alapján. Anélkül, hogy bármilyen mélységben belemennénk ebbe, az XPath az ún. XSLT-standard részeként arra használható, hogy egy XML dokumentum attribútumain vagy elemein navigáljunk keresztül.
Tehát egy újabb cellába írjuk be a következőt:
=FILTERXML(A3,"(//description)[last()]")
Az első paraméter, az A3, az a cella, ahova az előbbi WEBSERVICE formulával kinyertük a valid XML-formátumú tartalmunkat, a második paraméter pedig az XPath-formátumban megadott szövegrész, amit az XML-ben akarunk levadászni.
//description beírásával az XML-ben megkeressük az első Description előfordulást, az utána következő [last()] argumentummal pedig azt érjük el, hogy ne az első, hanem az utolsó Description előfordulást kapjuk vissza - hiszen az XML-ben, ha jól megnézzük, ott van az, amit keresünk.
Ezután már csak annyi van hátra, hogy egy SEARCH formulát és egy MID valamint egy LEN formulát egybeágyazzunk (vagy akármilyen más darabolós megoldást), hogy kinyerjük azt a szövegrészt, amit akarunk - gondolok itt mondjuk a helységre vagy az adott napi hőmérsékleti adatokra. És ezzel már meg is van az automatikusan frissülő időjárási adatunk, már csak bele kell varázsnolnunk egy szép napocskás, felhős, esős stb. formátumú mini-dashboardba.