Blog

Javascript w świecie MS Office, czyli jak na nowo okiełznąć Excela

Excel i JavaScript, czyli nowe podejście Microsoftu do automatyzacji zadań w Office.

Javascript w świecie MS Office, czyli jak na nowo okiełznąć Excela

Już od kilku wpisów mniej lub bardziej otwarcie sygnalizuję, że dotychczas poruszana na tym blogu tematyka zaczyna mnie powoli nużyć, a to znudzenie podlane jest dość obficie – być może nieuzasadnionym po trosze – rozczarowaniem wyrastającym z faktu, że WordPress niestety zasłużenie dzierży palmę pierwszeństwa, jeśli chodzi o tworzenie witryn dla wszystkich małych i jeszcze mniejszych projektów, a w szczególności tych stawianych przez hobbystów w rodzaju piszącego te słowa. 

Ta – być może chwilowa – awersja połączona z deficytem czasu wolnego powoduje, że na samą myśl o planowanej migracji obecnego bloga na inne rozwiązanie, przyprawia mnie uczucie przemożnej senności, bo momentalnie me ciało opuszcza każda najmniejsz nawet czątka energii. Jako antidotum na ten stan rzeczy zaordynowałem sobie całkowitą absytnencję od eksplorowania zagadnień ściśle związanych z tworzeniem rozwiązań webowych, a w to miejsce zająć się czymś innym, co tak naprawdę legło u podłoża idei o powołaniu do życia niniejszego bloga, czyli zagadnieniem pracy z danymi. A ponieważ w naszym pięknym nadwiślańskim kraju, choć zapewne podobnie jest na całym świecie, narzędzia dostarczane przez Microsoft w ramach pakietu Office, ze szczególnym uwzględnieniem Excela, są synonimem szeroko pojętej inżynierii danych, więc siłą rzeczy zacząć należało od “bohatera” dzisiejszego wpisu.

Oczywiście zapewne jakaś część z tego szerokiego wachlarza – czasem wręcz anegdotycznych – zastosowań bierze się z mentalnego lenistwa użytkowników czy bardziej koncyliacyjnie rzecz stawiając: z powodu naturalnej i ewolucyjnie wykształconej umiejętności ekonomicznego zarządzania skończonymi zasobami energii własnej. Tym niemniej dzisiaj nie zamierzam się pochylać nad kondycją naszego gatunku, jeno zaproponować krótkie wprowadzenie do tego, czemu chciałbym się dokładniej przyjrzeć w najbliższym czasie. Chodzi o stosunkowo nowe rozwiązanie w tym obszarze produktów MS, które umożliwia automatyzację zadań w aplikacjach z pakietu Office. Otóż od kilku lat osoby takie jak ja, które nigdy nie mogły przekonać się do VBA mają alternatywę w postaci API JavaScript. To rozwiązanie obecnie w dość dużym już stopniu pokrywa się z zakresem tego, co potrafią wyczarować magicy od Visual Basica, choć ma pewne ograniczenia, ale z drugiej strony dość niebagatelne przewagi. Temu właśnie chciałbym poświęcić dalszą część dzisiejszego wpisu.

Oczywiście zapewne jakaś część z tego szerokiego wachlarza – czasem wręcz anegdotycznych – zastosowań bierze się z mentalnego lenistwa użytkowników czy bardziej koncyliacyjnie rzecz stawiając: z powodu naturalnej i ewolucyjnie wykształconej umiejętności ekonomicznego zarządzania skończonymi zasobami energii własnej. Tym niemniej dzisiaj nie zamierzam się pochylać nad kondycją naszego gatunku, jeno zaproponować krótkie wprowadzenie do tego, czemu chciałbym się dokładniej przyjrzeć w najbliższym czasie. Chodzi o stosunkowo nowe rozwiązanie w tym obszarze produktów MS, które umożliwia automatyzację zadań w aplikacjach z pakietu Office. Otóż od kilku lat osoby takie jak ja, które nigdy nie mogły przekonać się do VBA mają alternatywę w postaci API JavaScript. To rozwiązanie obecnie w dość dużym już stopniu pokrywa się z zakresem tego, co potrafią wyczarować magicy od Visual Basica, choć ma pewne ograniczenia, ale z drugiej strony dość niebagatelne przewagi. Temu właśnie chciałbym poświęcić dalszą część dzisiejszego wpisu.

Żeby jednak nie było zbyt prosto to MS przygotował dwa osobne interfejsy, choć prawdopodobnie w sporej części zbieżne, jeśli chodzi o dostępne metody. Albo jeszcze inaczej sprawę stawiając: korzystać z dobrodziejstw JS możemy na dwa sposoby, które pod pewnymi względami są bardzo podobne, ale również całkiem sporo je dzieli. Otóż mamy na stole z jednej strony coś co nazywa się Office Scripts (OSC), zaś z drugiej Office Add-ins (OAD). Od razu zaznaczyć należy, że to drugie rozwiązanie ma dużo większy potencjał rozwojowy, ale też nieco większy próg wejścia. Co więcej z perspektywy osób pracującymi dotychczas z makrami VBA OSC wydaje się zdecydowanie bardziej podobny. Zanim jednak przejdziemy do krótkiego omówienia plusów dodatnich oraz ujemnych w stosunku do VBA słów parę poświęcimy różnicom, ponieważ oba podejścia na tyle się różnią, że trudno je łącznie porównywać z “tradycyjnym” tworzeniem makr. 

Natomiast dzisiaj chciałbym się jednak przyjrzeć głównie OSC i tutaj od razu muszę odpalić z grubej rury, czyli wspomnieć o zdecydowanie największej słabości tego rozwiązania, która dla części użytkowników może być wręcz dyskwalifikująca to podejście do automatyzacji zadań. Niestety OSC działają wyłącznie dla webowej wersji Excel, podczas gdy OAD jest rozwiązaniem multiplatformowym, do czego zapewne jeszcze wrócę. 

Kolejną przewagą jaką mają Add-ins nad Skryptami to sposób działania, wynikający prawdopodobnie z asynchronicznej natury tych pierwszych. Nie wiem czy do końca czuję dobrze w tym momencie różnice między nimi zdawkowo opisaną w dokumentacji:

Office Scripts run to completion with a manual button press or as a step in Power Automate, whereas Office Add-ins persist while their task panes are open. This means the add-ins can maintain state during a session, whereas Office Scripts do not maintain an internal state between runs.

Jeśli właściwie odczytuję ten wyimek to asynchroniczna natura API dla OAD pozwala, by takie rozwiązanie było w stanie reagować na zmiany następujące w obrębie dokumentu w trakcie trwania sesji, podczas gdy skrypty JS wymagają “odświeżenia”, czyli każdorazowego uruchomienia w sposób manualny czy przy wykorzystaniu mechanizmu planera. Tym samym nie obsługuje żadnych zdarzeń, które w między czasie mogą wystąpić podczas pracy z dokumentem, o ile mniej lub bardziej świadomie tego skryptu nie wywołamy. Jedyną zaletą w stosunku do OAD jaką osobiście byłby skłonny uznać i to raczej w niewielkim zakresie, to możliwość korzystania z rejestratora skryptów na wzór tego dla makr oraz ogólnie niższy próg wejścia, ponieważ tworzenie skryptów zdecydowanie bliższe jest temu, co wykonuje się przy tworzeniu makr niż w przypadku budowy dodatku (add-ins).

Dlaczego jednak warto czy nawet trzeba dać szansę tym nowym rozwiązaniom, nawet jeśli w przypadku osoby, która osiągnęła poziom mistrza w zakresie produkcji makr VBA? Tak jak wyżej wspomniałem oba te podejścia różni całkiem sporo, więc w dalszej części tekstu będę starał się wskazywać na te rozbieżności.

  1. Multiplatformowość.

O ile niewątpliwą wadą OSC jest ograniczenie do klientów webowych, to ten sam zarzut do pewnego stopnia można postawić VBA, gdyż ten makra tworzone w przypadku tego ostatniego działają wyłącznie w wersji desktopowej. Zapewne jest to cały czas mniej bolesne niż w przypadku OSC, ale czasy się zmieniają i trzeba mimo wszystko traktować to jako pewne ograniczenie, które z czasem będzie zapewne coraz bardziej dokuczliwe. Takich barier nie mają zupełnie OAD, które współpracują zarówno z Officem w wersji przeglądarkowej, stacjonarnej jak i tymi dostępnymi dla urządzeń przenośnych (Android oraz IOS). W przypadku przenoszenia coraz większej części naszej aktywności do chmury oraz potrzeby dostępu do narzędzi również na urządzeniach mobilnych jest to chyba największy killer feature OAD. 

  1. Dostęp do Power Automate

Niestety bardzo mało wiem o tym rozwiązaniu, a tak całkiem szczerze sprawę stawiając: o jego istnieniu dowiedziałem się przeglądając dokumentację na stronie MS. Dlatego w tym miejscu tak naprawdę referuję wyłącznie to, co dane mi przeczytać pobieżnie w tym zakresie. Natomiast w świetle nawet tych skromnych informacji całość wydaje się bardzo użytecznym rozwiązaniem.Otóż Power Automate pozwala na wykonywanie akcji, których harmonogram możemy sami odgórnie zaplanować albo w oparciu o wcześniej zdefiniowane zdarzenia, których wystąpienie ma spowodować jakieś działanie. Najfajniejsze w tym wszystkim jest to, że narzędzie to działa nawet wówczas, gdy nie korzystamy z naszego skoroszytu (nie musi być on nawet otwarty), pod warunkiem, że zapisany on jest w magazynie One Drive.

  1. Łatwość implementacji w organizacji

Chwilę się zastanawiałem czy o tym w ogóle wspominać, mając na uwadze, do kogo w pierwszej kolejności kieruję ten wpis. Ostatecznie postanowiłem o tym napisać, ponieważ może to być zaleta nawet w przypadku pracy w niewielkich zespołach, choć dla osób korzystających z dobrodziejstw Office’a w “samotności” nie będzie to miało raczej żadnego znaczenia. Idzie o to, że dodatki (OAD) charakteryzują dużo większą prostotą, jeśli chodzi o ich przenośność. W pewnym sensie można czy nawet powinno się je traktować jako zazwyczaj niewielkie webaplikacje (nieco więcej na ten temat piszę w kolejnym punkcie), co znacząco upraszcza ich dystrybucję w organizacji.

  1. Javascript w miejsce VBA

W tym przypadku ciężko mówić o jakiejś bezpośredniej przewadze jednego nad drugim, zwłaszcza że w takich dyskusjach zazwyczaj w takich dyskusjach pojawia się argument, by nie porównywać jabłek do pomarańczy, z czym w zasadzie się zgadzam, ale mimo wszystko kończąc niniejszy wpis pokuszę się o takie zestawienie. Przede wszystkim należy pamiętać, że VBA opiera się na nie rozwijanym od 2005 roku Visual Basicu w wersji 6.0. Tego ostatniego zastąpić miał VB dla .NET Framework, który jednak – z tego co czytam – znacząco się różni od “zwykłego” VB pod pewnymi względami. Dodatkowo co rusz MS sygnalizuje, że nawet nawet następca tego ostatniego może w którymś momencie przestać być rozwijany, więc chyba powoli należy oswajać się z myślą, że VBA wiecznym nie będzie i przy okazji którejś iteracji produktów MS może ostatecznie zniknąć albo wymagał będzie dodatkowo płatnego supportu.

Coby jednak za bardzo nie wybiegać w przyszłość i jednocześnie próbować odgadywać planów MS już ostatnie fragmenty tego tekstu poświęcę temu, dlaczego mimo wszystko zadać sobie trud poznania JS. Otóż znajomość JS otwiera przed użytkownikiem zupełnie nowe perspektywy. Warto bowiem przypomnieć, że język ten przeszedł bardzo długą drogę od pewnej – swego czasu niespecjalnie lubianej i poważanej – ciekawostki, służącej li tylko do tworzenie wodotrysków na stronach internetowych, do statusu narzędzia bez którego nie sposób dzisiaj wyobrazić sobie rozwój tworzenie aplikacji webowych. Ponadto programiści JS coraz śmielej spoglądają w inne obszary zastosowań, czasami dość odległe od standardowego podejścia. Dość powiedzieć, że z tych dziedzin informatyki, które jakoś szczególnie mnie interesują, to obecnie z powodzeniem można robić projekty związane z uczeniem maszynowym i to bez konieczności samodzielnego implementowania algorytmów, ponieważ powstało całkiem sporo sensownych bibliotek, włączając to w TensorFlow. 

Oczywiście jeśli czyjaś aktywność zamyka się li tylko i wyłącznie w excelowej niszy, a przy tym nie widać perspektyw, by miała się to zmienić wszystko, to wszystko o czym napisałem w poprzednim akapicie może nie mieć większego znaczenia. Ale nawet wówczas warto może wspomnieć o pewnym niebagatelnym aspekcie, z którymi mamy do czynienia w przypadku OAD. Ponieważ w przypadku pracy nad dodatkami tak naprawdę tworzymy typową aplikację webową specjalnego przeznaczenia, więc mamy praktycznie całkowitą dowolność z korzystaniu z całego bogactwa gotowych bibliotek JS oraz dostępnych w Internetach tutoriali oraz wskazówek, z których możemy do woli korzystać w naszym projekcie, dalece rozszerzając możliwości, które daje nam sam Excel.