Możesz skorzystać z menu kontekstowego wybierając polecenie Czcionka (w edytorze Writer Znak) lub: W programie MS Word skorzystać z grupy narzędzi Czcionka w zakładce Narzędzia główne; W programie Writer w menu Format wybrać Znak a następnie zakładkę Pozycja. Zobacz prezentację z poprzedniego zadania i zamiast indeksu górnego Jeśli chcesz usunąć przypis dolny lub końcowy, usuń numer bądź znacznik odwołania w treści dokumentu, a nie tekst odwołania do przypisu dolnego lub końcowego na końcu strony, sekcji bądź dokumentu. Jeśli usuniesz tekst odwołania, numer lub znacznik odwołania pozostanie w dokumencie. Równania matematyczne w edytorze tekstu, Formularze w edytorze tekstu, Współpraca podczas edycji dokumentów w edytorze tekstu, Wykorzystanie chmury w edytorze tekstu, Spisy elementów w edytorze tekstu, Stopki, nagłówki i pola dynamiczne w edytorze tekstu, Makra w edytorze tekstu, Szablony w edytorze tekstu, Autoformatowanie w edytorze W ten sposób unikniecie utraty formatowania w przypadku zmiany edytora tekstowego. Zapis dokumentu w formacie html . Korzystając z edytora tekstu, w prosty sposób można wykonać stronę sieci Web. Wystarczy utworzony dokument zapisać w formacie html. Taki zapis umożliwia odczytanie tekstu w dowolnej przeglądarce internetowej. Ponowne wykonywanie akcji. Aby ponownie wykonać cofniętą akcję, naciśnij klawisze Ctrl+Y lub klawisz F4. (Jeśli naciśnięcie klawisza F4 nie skutkuje, być może trzeba nacisnąć klawisz F-Lock lub klawisz Fn, a następnie klawisz F4). Jeśli wolisz używać myszy, kliknij przycisk Wykonaj ponownie na pasku narzędzi Szybki dostęp. Sprawdź swoje umiejętności pisania tekstów za pomocą komputera. W tym celu uruchom program do pisania tekstów i napisz krótki tekst prezentujący twoją osobę. Przedstaw się, napisz w kilku zdaniach, które przedmioty nauczane w szkole lubisz i jakie są twoje zainteresowania. Zapisz dokument na swoim komputerze i zakończ pracę w Istnieje kilka rodzajów licencji oprogramowania, takich jak: licencja publiczna (Public License), licencja open source (Open Source License) i licencja typu shareware (Shareware License). Każda z tych licencji ma swoje własne specyficzne cechy i warunki, które trzeba przestrzegać podczas korzystania z danego programu. W edytorze tekstu utwórz raport zgodnie ze wzorem tabeli Raport serwisowy; W raporcie serwisowym zapisz w punktach wykonane czynności serwisowe; Dokonaj oceny parametrów komputera w oparciu o przeprowadzony test wydajności komputera i oceń przydatność komputera do zastosowań multimedialnych. automatyzacja czynności w edytorze tekstu notepad ++ Notepad++ jak sama nazwa wskazuję jest lepszą wersją windowsowego notatnika. Umożliwia prace na wielu plikach tekstowych poprzez zakładki, pozwala również na świetną automatyzacje czynności w edytorze tekstu poprzez wbudowane nagrywanie i odtwarzanie macro. Zadanie wykonaj dla trzech przykładowych edytorów tekstu. Zwróć uwagę na prawidłowości w oznaczeniach poszczególnych poleceń. Przedyskutuj z kolegami swoje spostrzeżenia. Jeśli masz problem z wykonaniem zadania, skorzystaj z dodatkowych informacji. Formatowanie tekstu w edytorze tekstu MS Word. Formatowanie tekstu w edytorze tekstu DMxgzXH. ›@kaisuj›Automatyzacja pracy z Wordem — wprowadzenie do pisania makr 20:06W dzisiejszym wpisie chciałbym Wam przybliżyć potężne narzędzie dołączone do pakietu MS Office jakim jest VBA (Visual Basic for Applications). Nie wiele osób słyszało o istnieniu VBA, a jeszcze mniej z niego korzysta. Możliwości VBA są ogromne, a w przypadku Excela, zamieniają go wręcz w platformę programistyczną. Takie stwierdzenie może wydawać się naciągane, ale wystarczy przejrzeć takie pozycje książkowe jak Excel. Programowanie dla profesjonalistów. aby się przekonać, że Excel w połączeniu z VBA staje się czymś więcej niż arkuszem to jest VBA?VBA jest językiem programowania opartym na Visual Basicu w wersji 6. Jest dołączony do poszczególnych programów pakietu MS Office wraz z prostym edytorem. Co ciekawe, występuje jednak nie tylko w MS Office. Można go spotkać również takich programach jak AutoCAD, Wordperfect czy Corel Draw, a także WPS Office Pro. W uproszczeniu można powiedzieć, że służy do pisania makr, a więc do zautomatyzowania pewnych czynności w pracy z programem. Jest idealny w sytuacjach, kiedy wielokrotnie wykonujemy serię tych samych czynności. Za pomocą VBA możemy zamienić te czynności w skrypt, który wykona je automatycznie za nas z naciśnięciem jednego a makraByć może niektórzy z Was słyszeli o czymś takim jak makra (makrodefinicje) w Wordzie i nawet kiedyś z nich skorzystali, ale nie słyszeli niczego o VBA. Programy MS Office (z wyjątkiem Outlooka) mają dołączony rejestrator makr, który zamienia wykonywane przez nas czynności w trakcie nagrywania makra na kod VBA. Zwykły użytkownik nie jest tego świadomy, bo nigdzie tego nie widać. Odtwarzane makro odbywa się na podstawie zapisanego skryptu VBA. Jest to idealne rozwiązanie dla mniej zaawansowanych użytkowników, którzy chcą zautomatyzować swoją pracę z Wordem. Niestety rejestrator makr ma pewne ograniczenia. Nie jest w stanie zarejestrować wszystkich czynności. Nie można też za jego pomocą wykonać wielu procesów automatyzacji wymagających wyższego poziomu abstrakcji. Możemy przykładowo nagrać makro, w którym zmieniamy kolor wierszy tabeli dla wierszy 1, 3, 5, 7, 9. I makro będzie wspaniale się spisywało, ale tylko w tabelkach z 9-cioma wierszami. Gdy dodamy więcej wierszy, nasze makro nie uwzględni nowo dodanych wierszy. W takich sytuacjach trzeba albo edytować automatycznie utworzone makro, albo po prostu napisać swoje od to jest trudne?Moja przygoda z programowaniem zaczęła się właśnie od VBA. Z pewnością VBA nie jest najlepszym językiem do nauki programowania, ale z drugiej strony jest on bardzo łatwy i intuicyjny. Proste makra można tworzyć nawet bez podstaw programowania. W bardziej złożonych skryptach konieczne jest poznanie koncepcji instrukcji warunkowych i pętli. Moim zdaniem VBA jest na tyle proste, że osoby, które nie zamierzają się uczyć programowania, są w stanie opanować go na tyle dobrze, by stworzyć wiele ciekawych czego zacząć?Do nauki VBA polecam starsze wersje pakietu Office. Dawno już nie miałem do czynienia z VBA i ostatnim razem, gdy robiłem coś w pracy, pracowałem na Office 2010. Pisząc ten wpis postanowiłem sprawdzić wersję 2013 i mam wrażenie, że rejestrator makr został zoptymalizowany. Wcześniejsze wersje charakteryzowały się sporą nadprodukcją kodu. Przykładowo rejestrując makro, w którym chciałem pogrubić czcionkę w zaznaczonym fragmencie tekstu, stara wersja rejestratora makr generowała kod, w którym ustawiała chyba wszystkie możliwe rzeczy związane z czcionką, mimo że zmieniane jest tylko pogrubienie. W efekcie otrzymywało się 20 linijek kodu zamiast 1. Optymalizacja może się więc wydawać dobrą rzeczą, jednakże z punktu widzenia poznawania VBA jest to utrudnienie. Rejestrator makr był bowiem idealnym narzędziem do poznawania modelu obiektowego VBA danego programu - w tym przypadku Worda. Dzięki tym 20 linijkom, po samej zmianie grubości czcionki, od razu wiedziałem także jak zmienić jej rozmiar, styl, samą czcionkę itd. Dostawałem początek proponuję więc nagrać proste makro. W tym celu musimy wejść w ustawienia programu Word i z lewej strony wybrać "Dostosowywanie wstążki". Tam musimy zaznaczyć checkoxa przy karcie "Deweloper". Dzięki temu pojawią nam się na wstążce narzędzia związane z VBA. Przechodzimy do karty deweloper i naciskamy "Zarejestruj makro". Wyskoczy nam okienko, w którym wpisujemy nazwę nowego makro. Inne opcje na razie nas nie interesują. Kursor myszy zmieni się - pojawi się ikonka kasety magnetofonowej, wskazującej że jesteśmy w trybie rejestracji makra. Od tej pory nasze czynności zostaną zapamiętane i zapisane jako kod VBA. Na początek proponuję zmienić czcionkę pojedynczego wyrazy, na którym akurat stoimy na pogrubioną. Aby zakończyć naciskamy "Zatrzymanie rejestrowania" w karcie Deweloper lub przycisk kwadracika na dolnym pasku. Właśnie zarejestrowaliśmy nasze nowe makro. Jak je obejrzeć? Możemy z karty Deweloper wybrać "Visual Basic" lub nacisnąć skrót klawiszowy ALT+ VBAZ lewej strony mamy drzewo wskazujące gdzie są zapisane nasze makra. Zazwyczaj zapisujemy nasze makra w pliku (domyślnie tak są zapisywane makra). Jest to plik szablonu. Makra zapisane w tym pliku będą dostępne dla wszystkich dokumentów Worda. Istnieje też możliwość zapisania makra w konkretnym dokumencie. Po prawej stronie mamy zapisane same makra. Poszczególne makra są oddzielone poziomymi liniami. Każde makro ma następującą postać:Sub NazwaMakra() instrukcje End SubInstrukcje są poleceniami, które ma wykonać Word. W naszym przypadku instrukcja ma postać: = wdToggleOmówię teraz pokrótce poszczególne elementy tej instrukcji. Selection reprezentuje w kodzie obszar zaznaczenia tekstu. Jeżeli nic nie jest zaznaczone (nie ma koloru tła wskazującego na zaznaczone litery) to zaznaczony jest pojedynczy znak, który stoi w tekście bezpośrednio za migającym kursorem. Jeśli w edytorze VBA wpiszemy sobie Selection i postawimy kropkę to pojawi nam się rozwijana lista różnych poleceń. W uproszczeniu można powiedzieć, że zawiera ona różne rzeczy, jakie możemy zrobić z zaznaczeniem. Na tej liście znajduje się Font - czyli zbiór rzeczy jakie możemy zrobić z czcionką naszego zaznaczenia. Kolejna kropka, postawiona po Font, znów pokaże nam listę. Tym razem będzie to lista rzeczy jakie możemy zrobić z czcionką. Na tej liście mamy Bold, czyli pogrubienie. Tak więc całe wyrażenie po lewej stronie znaku równości oznacza ustawienia pogrubienia czcionki zaznaczonego fragmentu tekstu. A jakie mogą być te ustawienia? Najogólniej mówiąc pogrubienie może być albo włączone albo wyłączone, przy czym efekt ten możemy osiągnąć na dwa sposoby. Znak równości przypisuje właściwości czcionki jaką jest Bold konkretną wartość (ustawienie). Samo wdToggle nie oznacza ani włączenia, ani wyłączenia pogrubienia. Jest on przełącznikiem. Taki zapis sprawia, że za każdym razem, gdy będziemy uruchamiać nasze makro, najpierw będzie sprawdzane, czy pogrubienie w zaznaczeniu jest włączone czy nie, a następnie będzie zmieniać jego stan na przeciwny. Działa więc to dokładnie tak samo, jakbyśmy przyciskali przycisk pogrubienia (B) w karcie narzędzi głównych. Możemy jednak zmienić nieco to działanie wpisując zamiast wdToggle wartość logiczną true lub false (prawda lub fałsz): = TrueTak zapisane makro będzie zawsze ustawiać pogrubienie zaznaczonego tekstu bez względu na to czy wcześniej było ono pogrubione czy koduPisząc lub modyfikując bardziej złożone makra będziemy potrzebowali sprawdzać / testować zachowanie się naszego skryptu lub jego fragmentów. W tym celu warto poznać kilka podstawowych technik przydatnych przy takim testowaniu. Po pierwsze bardzo pomocne jest wykomentowanie fragmentu kodu - zaznaczenie kodu jako komentarz tak, aby interpreter języka pomijał te linijki i traktował jako komentarz (informację dla programisty). W tym celu należy na początku linijki napisać znaku pojedynczego cudzysłowu. Warto dostsować sobie pasek narzędziowy (prawy przycisk myszki w dowolnym miejscu paska i wybrać Customize..) poprzez dodanie z kategorii edit comment block i uncommnent block. Pozwalają one na automatyczne komentowanie i odkomentowanie wielu linijek zastosowania komentowania koduJeśli mamy naszą pierwszą linijkę kodu: = wdTogglei chcemy przetestować działanie makra zamieniając wdToggle na True, możemy skopiować całą linijkę, wykomentować ją i pod spodem wkleić skopiowaną linijkę i w niej zmienić wdToggle na True:' = wdToggle = TrueDzięki takiemu zabiegowi możemy szybko wrócić do pierwotnej wersji kodu, jeśli uznamy, że nowo testowany przez nas fragment nie działa tak, jakbyśmy oczekiwali. Podany przeze mnie przykład jest oczywiście banalny i łatwo zapamiętać i wrócić do wdToggle bez kopiowania i komentowania kodu, a jeśli będziemy mieli do przetestowania kilkadziesiąt linijek kodu, zawierających zagnieżdżone pętle z instrukcjami warunkowymi, to wtedy komentowanie kodu będzie kod, wielokrotnie napotykamy na sytuacje, w których chcemy sprawdzić jaka jest wartość danego wyrażenia. W przypadku pogrubienia możemy oczywiście zobaczyć w Wordzie gdzie stoi kursor i sprawdzić organoleptycznie czy zaznaczony fragment jest pogrubiony. Jednakże są sytuacje, w których określenie wartości nie jest takie proste i potrzebne jest wsparcie w samym kodzie. Jednym z nich jest MessageBox. Jest to okienko, które pojawia się w programie wyświetlając komunikat. Możemy tak napisać kod, by treścią komunikatu była wartość sprawdzanego przez nas ( przetestować nasz kod, musimy uruchomić makro. Możemy to zrobić z poziomu edytora VBA naciskając klawisz F5 lub z poziomu Worda z karty Deweloper wybierając Makra (lub ALT+F8) i tam uruchomieniu makra wyskoczy okienko z komunikatem. Treść komunikatu będzie wartością liczbową. Wartość wyrażenia rzadko kiedy jest wyświetlana tak, jak w kodzie, czyli np. true, false. W przypadku pogrubienia dostajemy 0, jeśli zaznaczenie nie jest pogrubione, -1, jeśli jest pogrubione lub 99999999 jeśli zaznaczenie jest częściowo pogrubione. Znajomość tych wartości jest bardzo przydatna, gdy chcemy budować instrukcje warunkowe. Są to takie instrukcje, które wykonują różne wersje kodu, w zależności od spełnienia bądź nie zadanego warunku. Ogólna postać instrukcji warunkowej jest następująca:Jeżeli (spełniony jest ten warunek) to wtedy wykonaj taka instrukcję jeżeli zaś(spełniony jest ten warunek) to wtedy wykonaj taką instrukcję w przeciwnym razie wykonaj tą instrukcję koniec bloku jeżeliMożemy wykorzystać taką instrukcję do wyświetlenia komunikatu w zależności od stanu pogrubienia ( = -1) Then MsgBox ("Ten fragment jest pogrubiony") ElseIf ( = 0) Then MsgBox ("Ten fragment NIE jest pogrubiony") Else: MsgBox ("Ten fragment jest częściowo pogrubiony") End IfW zależności od tego, jaką wartość przyjmie Bold, wyświetli się jeden z trzech komunikatów. MsgBox nie jest jednak najlepszym narzędziem do testowania kodu, zwłaszcza gdy chcemy sprawdzić wiele wartości, np. wyświetlić listę pewnych wartości. W takiej sytuacji musielibyśmy klikać OK dla każdej wartości na liście, co jest bardzo WindowMożemy zastąpić MsgBox komunikatami wyświetlanymi w tzw. 'Immediate Window", które włączamy w edytorze VBA skrótem klawiszowy CTRL+G. Komendą zastępującą MsgBox jest Pokażę teraz jak przy pomocy wyświetlić w immediate window zawartość zaznaczenia oraz jego długość liczoną w (Selection) ( linijka wyświetli w oknie treść zaznaczenia, druga zaś zlicza ilość znaków w zaznaczeniu. Jeśli więc napiszemy sobie w wordzie dobreprogramy, zaznaczymy i uruchomimy makro to otrzymamy:dobreprogramy 13Sprawdzanie zawartości i długości zaznaczeniaZaczynamy programowaćNa początku napisałem, że można stworzyć proste i użyteczne makra bez znajomości zasad programowania. Rejestrator makr nie używa nawet takich podstawowych elementów programowania jakimi są zmienne, instrukcje warunkowe czy pętle. Gdy zaczynamy się uczyć jak tworzyć makra nie są one potrzebne. Jednakże, gdy już oswoimy się edytorem VBA, poznamy podstawowe elementy, którymi manipulujemy w makrach takie, jak zaznaczenie, wyrazy, znaki, czcionki itp. będziemy mieć co raz więcej pomysłów na kolejne, bardziej złożone makra. Z czasem, a nastąpi to raczej dosyć szybko, uświadomimy sobie, że pewnych pomysłów nie jesteśmy w stanie zrealizować rejestratorem makr. Zaczniemy sami pisać instrukcje, ale ciągle będzie nam brakowało odpowiednich narzędzi do zrealizowania bardziej ambitnych pomysłów. Pewnych rzeczy nie da się po prostu zrobić bez podstawowych elementów są pierwszym takim elementem. Każda zmienna musi mieć swoją unikalną nazwę, przy pomocy której będziemy się do niej odwoływać. Zadaniem zmiennych jest przechowywanie wartości. Jak sama nazwa wskazuje, wartość przechowywana przez zmienną może ulegać zmianie w czasie wykonywania kodu. VBA jest bardzo liberalne w zakresie zasad tworzenia zmiennych. W większości języków programowania zmienne muszą być przed pierwszym użyciem zadeklarowane. Co więcej, zmienna taka musi mieć określony typ danych, jaki będzie przechowywać. Jeśli więc będziemy przechowywać w niej liczby całkowite, to musimy ją zadeklarować jako zmienną typu liczb całkowitych. W VBA nie ma takiej konieczności. Jest to duże ułatwienie dla osób, które nie miały do tej pory styczności z programowaniem. Wystarczającą i prawidłową konstrukcją jest więc taki zapis:iloscWyrazow = ten sposób tworzymy zmienną o nazwie iloscWyrazów i przypisujemy jej wartość liczbową równą ilości wyrazów w zaznaczeniu. Aby sprawdzić czy nasza zmienna faktycznie działa, możemy wyświetlić jej zawartość: (iloscWyrazow)Ja jednak zachęcam do deklarowania zmiennych. Choć może się wydawać to zbytecznym wysiłkiem, jest to bardzo pomocne. Po pierwsze unikniemy w ten sposób wielu błędów. Interpreter rozróżnia wielkość liter. Jeśli więc pomylimy się i napiszemy: (iloscwyrazow)to nie uzyskamy prawidłowej wartości, ponieważ interpreter nie zrozumie, że chodzi nam o zmienną pisaną przez duże W. Zmienne uprzednio zadeklarowane, zostaną automatycznie poprawione w trakcie pisania. Co więcej, jeśli nie pamiętamy dokładnie nazwy zmiennej, to po napisaniu pierwszych liter możemy użyć skrótu CTRL+SPACJA, który automatycznie dopisze nam nazwę zadeklarowanej zmiennej do końca. Zmienne deklarujemy słówkiem Dim (co jest bodajże skrótem do declare in module) poprzedzającym nazwę zmiennej: Dim iloscWyrazow As Integer iloscWyrazow = (iloscWyrazow) Wyrażenie "As Integer" jest również opcjonalne i oznacza ono określenie typu danych przechowywanych przez zmienną, w tym przypadku to liczby całkowite. VBA potrafi automatycznie rozpoznawać typy danych, dlatego osoby początkujące mogą sobie tym nie zaprzątać głowy. Podaję to bardziej jako podstawowym elementem programowania są pętle. Są to wielokrotnie powtarzane bloki instrukcji. Może to być nawet jedna instrukcja powtarzana wielokrotnie. Jeśli więc przykładowo chcielibyśmy kazać Wordowi by narysował linię składającą się z kropek to kazalibyśmy mu wielokrotnie wykonać jedną prostą instrukcję: napisz znak kropki. Jest kilka podstawowych rodzajów pętli. ja pokażę najprostszą z nich - pętle "for". Powtarzana ona daną instrukcję / blok instrukcji zadaną z góry ilość razy. Ilością kroków (powtórzeń) pętli steruje tzw. zmienna sterująca. Często jest nazywana "i" od ang. integer - liczba całkowita, ale możemy ją sobie nazwać dowolnie, np. licznik. W każdym języku programowania ta pętla ma w kodzie nieco inną postać, ale ogólnie można ją przedstawić tak: Dla wartości zmiennej sterującej od 1 do 10 wykonuj następujący kod. Dla lepszego zrozumienia podam najprostszy możliwy licznik = 1 To 10 (licznik) Next licznikPrzykład pętli for z 10 krokamiW każdym kroku pętli zmienna licznik przyjmuje kolejno wartości od 1 do 10. Pętle for stosujemy, gdy wiemy ile razy ma się ona "przekręcić". Dlatego przeważnie zanim zaczniemy pętle, musimy ustalić liczebność jakiegoś zbioru, na którym będziemy wykonywać operacje. Wytłumaczę to na przykładzie wyrazów w iloscWyrazow iloscWyrazow = For licznik = 1 To iloscWyrazow ( Next licznikPętla for wyświetla wszystkie wyrazy z zaznaczeniaW powyższym kodzie wykorzystujemy fakt, że Words jest ponumerowanym zbiorem elementów, zwanym w programowaniu tablicą. W tym przypadku jest to zbiór wyrazów z naszego zaznaczonego tekstu. Do każdego elementu takiego zbioru możemy się odwołać poprzez tzw. indeks tego elementu, czyli jego numer. Elementy są ponumerowane wedle kolejności występowania w tekście. Pierwszy element ma numer 1. W większości języków programowania pierwszy element tablicy ma indeks równy 0, ale w VBA domyślnie numerowanie elementów tablicy zaczyna się do 1. Można to zmienić, ale w wielu przypadkach tak jest łatwiej (np. numeracja wierszy w Excelu też zaczyna się od 1). Wracając do powyższego przykładu, zmienna iloscWyrazow przyjmuje wartość równą ilości wyrazów znajdujących się w zaznaczonym przez nas tekście, jeszcze przed rozpoczęciem pętli. To bardzo ważne! Pętla wykona tyle kroków, ile jest wyrazów. Zmienna licznik początkowo ma wartość 1. Po każdym wykonaniu instrukcji wyświetlenia wyrazu, zwiększy swoją wartość o 1. Dzięki temu za każdym razem ze zbioru wyrazów Words jest wybierany kolejny wyraz zaznaczenia i wyświetlany w immediate przykład zastosowania VBA w WordziePowiedzmy, że mamy prostą tabelkę jak na zrzucie ekranu tabelka utworzona w WordziePokaże jak zrobić, aby za pomocą makra VBA pokolorować nieparzyste wiersze tabeli licząc bez tabela Dim wiersze Dim licznik tabela = wiersze = For licznik = 2 To wiersze Step 2 = wdColorGray10 Next licznikNajpierw deklarujemy trzy zmienne. Pierwsza z nich będzie reprezentowała naszą tabelę, druga ilość wierszy w tabeli, a trzecia to zmienna sterująca pętlą. Tables jest zbiorem tabel w obrębie zaznaczenia. Zakładam, że przed uruchomieniem makra staniemy kursorem myszy gdziekolwiek w obrębie interesującej nas tabeli. Ponieważ będzie to jedyna tabela w obszarze zaznaczenia, będzie to pierwsza tabela w zbiorze Tables. Następnie zapisujemy do zmiennej wiersze ilość wierszy naszej tabeli przez funkcję Count wywołaną na rzecz zbioru wierszy tabeli Rows. Mając tak przygotowane zmienne zaczynamy pętlę. Pętla ta wygląda minimalnie inaczej od poprzedniej. Pojawia się bowiem słówko Step, które określa rozmiar kroku pętli. Step 2 sprawia, że zmienna sterująca licznik będzie się zwiększała po każdym przebiegu pętli o 2, a nie o 1 jak jest domyślnie. Odliczanie zaczynamy od 2, bowiem chcemy pominąć pierwszy wiersz, który jest nagłówkiem. W każdym kroku pętli wybieramy z tabeli pojedynczy wiersz o indeksie równym wartości zmiennej sterującej licznik. Za pierwszym razem będzie to 2, później 4 (zwiększamy o zawsze o 2), później 6 itd. W ten sposób w każdym kolejnym kroku pętli będziemy wybierać co drugi wiersz tabeli. Oczywiście, gdybyśmy z jakiegoś powodu chcieli wybrać co trzeci lub co czwarty wiersz tabeli, to możemy ustawić wartość Step na 3 lub 4. Gdy mamy już wybrany wiersz, to po kropce wybieramy właściwość wiersza jaką jest Shading, czyli cieniowanie, a po kolejnej kropce BackgroundPatternColor czyli kolor tła, jakim chcemy zamalować wiersz. Wszystkie te "nazwy" możemy szybko uzyskać rejestrując makro rejestratorem makr i zmieniając kolor tła pojedynczego wiersza. W uzyskanym kodzie otrzymamy wszystkie potrzebne informacje, które potem wykorzystamy we własnym kodzie. Po znaku równości wpisujemy wd (skrót od Word) i naciskamy CTRL+Spacja. Pojawia się nam lista dostępnych kolorów. Ja wybrałem szary 10%. Po wykonaniu makra tabelka wygląda następująco:Wiersze tabeli pokolorowane przy użyciu makra VBANajlepsze w naszym makro jest to, że możemy dodać nawet i 100 wierszy, a makro dostosuje się do nowej ilości wierszy i wykona zadanie tak samo szybko. Jest to niemożliwe do wykonania makrem zarejestrowanym przez rejestrator. Ale na tym nie koniec. Powiedzmy, że chcemy aby nasza tabelka miała w pierwszej kolumnie ponumerowane komórki. W tym celu dopiszemy kilka instrukcji wewnątrz naszej licznik = 2 To wiersze Step 2 = wdColorGray10 = licznik - 1 If (Not licznik = wiersze) Then + 1).Cells(1). = licznik End If Next licznikPo cieniowaniu dodałem linijkę, w której dla danego wiersza wybieram pierwszą komórkę tego wiersza (pierwszą kolumnę) i poprzez właściwość Text wpisuję tam liczbę równą co do wartości licznikowi minus 1. Odejmujemy 1 ponieważ zaczynamy numerowanie od drugiego wiersza wartością 1. Ponieważ nasza pętla wykonuje skoki co 2, w każdym kroku pętli trzeba obsłużyć dwa wiersze jednocześnie: bieżący - równy licznikowi oraz następny. Aby edytować następny wiersz, względem bieżącego (wskazanego wartością licznika) podajemy w indeksie wiersza licznik + 1. Wartość wpisywane tekstu tym razem równa jest licznikowi. Jednakże tak zmodyfikowany zapis jest nieprawidłowy dla ostatniego wiersza tabeli. Nie możemy w kodzie odnosić się do wiersza o indeksie licznik + 1 w ostatnim wierszu tabeli, ponieważ taki wiersz (ostatni + 1) nie istnieje. Dlatego zanim wykonamy taką instrukcję, musimy się upewnić, że będzie ona wykonywana wszędzie poza ostatnim wierszem. W tym celu skorzystamy z konstrukcji instrukcji warunkowej z warunkiem licznik nie jest równy ilości wierszy pokolorowana i ponumerowana makrem VBATakie makro można przerobić sobie tak, aby każda wstawiana przez nas tabela miała automatycznie ponumerowane wiersze w pierwszej kolumnie i pokolorowany co drugi wiersz. Nasze makra mogą być uruchamiane skrótem klawiszowym lub własnym przyciskiem na wstążce. Nie będę w tym wpisie omawiać sposobów na uzyskanie takiego efektu, bo jest to zagadnienie na tyle obszerne, że wymagałoby oddzielnego zwłaszcza te pisane własnoręcznie, potrafią znacząco zwiększyć możliwości Worda, przyspieszyć pracę, wyręczyć nas w żmudnych, powtarzających się czynnościach. W tym wpisie pokazałem jedynie proste przykłady, aby wyjaśnić podstawowe zasady działania makr i VBA. Możliwości są jednak niemal nieograniczone. Można przykładowo stworzyć makro, które będzie nam zamieniać wartość liczbową na słowną, co może być bardzo przydatne przy różnych rachunkach. Analogicznie można zamieniać daty. Wiele zależy od charakteru naszej pracy. Jeśli korzystamy z szablonów, które zawierają powtarzalne dane, możemy stworzyć makro, które przy zapisie nowego dokumentu z szablonu, będzie pobierać informacje z nazwy tego dokumentu (np. imię i nazwisko osoby, której dotyczy dokument) i wstawia w odpowiednie miejsca w dokumencie i to zanim zaczniemy prace z tym dokumentem. Możemy znacząco przyspieszyć formatowanie dokumentu, efektywniej wykorzystać style. VBA potrafi odczytywać dane z systemu plików, a także pobierać dane z innych dokumentów i to nie tylko Worda, ale także pozostałych programów Office'a. Excel czy Outlook dają jeszcze większe do popisu makrom VBA. Dlatego warto je znać, zwłaszcza gdy staramy się wycisnąć z tych programów jak najwięcej. Testerzy manualni i nudne powtarzalne zadania — strzeżcie się, bo nadchodzi era automatyzacji! Automatyzacja nigdy nie była tak prosta, bo na białym robo-koniu wjeżdża Robot Framework, narzędzie proste w obsłudze jak młotek, a zarazem potężne jak machina oblężnicza. Pamiętam, jak w jednej firmie nie mogłem pogodzić się z faktem, że wiele nieskomplikowanych testów musiałem wykonywać ręcznie. Jeszcze gorszy był fakt, że musiałem to robić za każdym razem, gdy wychodziła nowa wersja naszego produktu. Nowych funkcjonalności przybywało, a więc i testowanie zajmowało coraz dłużej. Nie będę ukrywał i szczerze przyznam, że stale przeszukuję rynek pracy w poszukiwaniu ciekawych ofert pracy. Dzięki temu orientuję się w zapotrzebowaniu na konkretnych specjalistów, ale też zauważam trendy technologiczne. Tak się złożyło, że w wielu ofertach zaczęła pojawiać się tajemnicza fraza — „Robot Framework”. Zainteresowany wygooglałem i zacząłem czytać. Okazało się, że to może być moją maścią na ból, który przeżywałem, wykonując manualnie po raz setny ten sam test. W zaledwie kilka dni samodzielnie przygotowałem środowisko i napisałem pierwsze testy, którymi podzieliłem się z zespołem. Początki były trudne, bo musiałem ostudzić obawy współpracowników, ale w końcu się udało — nasze testy manualne sukcesywnie zaczęliśmy zastępować automatycznymi. To pozwoliło nam na oszczędzenie czasu na nudnych, żmudnych zadaniach i wykorzystanie go na poprawianie jakości produktu. Narzędzie, którego się nauczyłem, pomogło mi też w zmianie pracy, bo okazało się, że moja przyszła firma również postawiła na tę technologię. Moja przygoda z Robot Framework trwa już ponad 2 lata, a ja wciąż znajduję dla niego nowe zastosowania. Teraz pewnie zastanawiasz się… Co to jest Robot Framework i dlaczego jest taki super? Robot Framework to narzędzie do automatyzacji testów i procesów zwanych RPA, czyli Robotic Process Automation. To pojęcie wciąż zyskujące na popularności, a oznacza zrobotyzowaną automatyzację procesów. Robotem może być zarówno maszyna, jak i oprogramowanie, natomiast omawiany proces jest czymś, co jeszcze do niedawna robił człowiek, ale nic nie stoi na przeszkodzie, aby wykonywał to ów robot. Jak dobrze wiemy, komputery z każdym rokiem rosną w siłę (obliczeniową), a wraz z nimi rośnie także poziom skomplikowania oprogramowania. Dzisiejsze programy mają coraz więcej możliwości, ale aby zapewnić im stabilne działanie, należy sporo czasu poświęcić na ich testowanie, którego celem jest zapewnienie jakości produktu. Liczba testów potrzebnych do sprawdzenia poprawnego działania specjalistycznych programów przekracza już często możliwości ludzkie, jednak automatyzacja wymaga umiejętności programowania oraz ogromnych nakładów finansowych i drogich narzędzi. Czy aby na pewno? Na ratunek przybywa Robot Framework, który udowadnia, że nic z powyższych nie musi być prawdą. Dlaczego? Jest darmowy Robot Framework rozwijany jest na zasadzie open-source, czyli oprogramowania z upublicznionym kodem źródłowym. To oznacza, że każdy może wziąć udział w rozwoju narzędzia, ale też korzystać z niego zupełnie za darmo. Tak, za darmo. Chętne firmy mogą też zapisać się jako członkowie fundacji i, płacąc roczne opłaty, wspierać rozwój narzędzia. Darmowy charakter oprogramowania zachęca do jego używania, ale też przyczynia się do powstania atmosfery wdzięczności, dzięki której ludzie chętnie i bez przymusu pomagają rozszerzać jego możliwości. Proponowane nowe funkcje i zmiany są sprawdzane przez członków społeczności i stopniowo wdrażane do kolejnych wersji. Jeśli Twój szef kiedyś powie, że firma nie ma kasy na automatyzację, bo to kosztowny proces — pokaż mu Robot Framework. Jest prosty w instalacji Do działania na systemie potrzebny jest jedynie Python, którego instalacja jest prosta jak instalacja Simsów. Ściągnąć go można z oficjalnej strony. Python działa na dowolnym systemie operacyjnym, a Robot Framework jest tak naprawdę pewną „zaawansowaną nakładką” na ten język programowania, więc nic więcej nam nie trzeba. Gdy już masz Pythona, wystarczy, że zainstalujesz Robot Framework komendą: pip install robotframework I sprawdź, czy instalacja się powiodła i jaką wersję masz zainstalowaną: robot --version Prawda, że proste? Myślę, że niewiele trudniejsze od obsługi myszki. Dobra, ale co dalej? Wystarczy tylko 1 plik, aby uruchomić automatyczne testy Tam, gdzie jedne narzędzia wymagają magisterki z programowania, aby skonfigurować środowisko, Robot Framework galopuje na skróty. Wystarczy stworzyć dowolny plik tekstowy z rozszerzeniem .robot, wystukać kilka znaków, uruchomić jedną komendę i już możemy cieszyć się pierwszy testem automatycznym. Pokażę Ci, jak to zrobić. Stwórz w nowym folderze plik o nazwie otwórz go w dowolnym edytorze tekstu (np. Notatnik lub Notepad++, chociaż zdecydowanie bardziej polecam PyCharm) i wypełnij go poniższym kodem: *** Test Cases *** Basket Should Have 3 Vegetables ${basket} Create List tomato corn lettuce Length Should Be ${basket} ${3} Zapisz plik i uruchom komendę w wierszu poleceń, będąc w katalogu, w którym stworzono plik: robot Jeśli wszystko się udało, konsola powinna nas poinformować, że nasz test został wykonany i się powiódł. W naszym folderze powinny też powstać 3 nowe pliki wyjściowe: i Zaraz o nich opowiem 🙂 Gratulacje! ? Twój pierwszy test automatyczny już jest gotowy do pracy. Robot nigdy się nie męczy, więc test można modyfikować i odpalać w nieskończoność. Ten artykuł nie ma na celu nauki narzędzia, a jedynie ukazać jego możliwości, a więc jeśli rozgrzałem w Tobie ciekawość, to poczekaj na kolejny artykuł z tej serii. Jeśli masz słabą cierpliwość i chcesz dowiedzieć się więcej TERAZ, to odwiedź oficjalną stronę, gdzie znajdziesz pełną dokumentację i proste przykłady. Ma zrozumiałe i czytelne logi Wróćmy do naszego testu. W naszym folderze powinniśmy mieć 3 nowe pliki. Zajrzyjmy do który zawiera logi ze wszystkimi krokami, jakie zostały wykonane w teście. Widok powinien być mniej więcej taki: Widok pliku Widzimy tu liczbę testów oraz jak wiele z nich skończyło się powodzeniem (zielony pasek), widzimy ile czasu trwały testy (tak, ten test jest tak krótki, że trwał nieco ponad s, stąd wszędzie zera). Zielony kolor dla testera jest jak brak kolejki na poczcie — zawsze cieszy. Testy, które się nie powiodły, oznaczane są zwyczajowo kolorem czerwonym. Nie lubimy koloru czerwonego. Bardzo wygodna jest możliwość rozwinięcia każdego testu i podejrzenia każdego kroku, jaki został wykonany. Klikając na nazwę testu, rozwinie się nam lista użytych keywordów (słów kluczowych), a jeśli ponownie na nie klikniemy, zobaczymy szczegóły dotyczące ich wykonania — krótki opis kroku, czasy rozpoczęcia, zakończenia i trwania oraz wynik: Szczegóły konkretnych kroków testu w pliku Plik jest mniej szczegółowym plikiem w formie raportu zdawanego swojemu przełożonemu (np. test managerowi), natomiast plik zawiera pełny zestaw informacji z danego uruchomienia testów i nie jest przeznaczony do czytania przez ludzi, a do przetwarzania danych, np. w celu dalszej automatyzacji procesu testowania. Ma najprostszy do czytania kod na świecie Ciężko wyobrazić sobie programowanie bez dziwnych nawiasów, niespodziewanych średników i wszechobecnych znaków równości. Coś, co wydaje się naturalne, tu zostało praktycznie wyeliminowane. Da się? Da się. Liczba rozpraszaczy została ograniczona do minimum, a sam kod składa się głównie z tekstu, który można czytać jak wiersz. Czytelność kodu zależy oczywiście od programisty, ale wspierane przez Robot Framework podejście KDT (Keyword Driven Testing), opiera się na pisaniu keywordów, które odgrywają rolę funkcji wykonujących proste czynności. Łączenie ich w większe formacje pozwala uzyskać treść testu, którą może przeczytać każdy, włącznie z osobami nietechnicznymi. To daje ogromną przewagę nad innymi frameworkami do testowania, których kod jest często zrozumiały tylko dla programistów. Zastosowanie Robot Framework do automatyzacji testów pozwala zacieśnić współpracę pomiędzy testerami a deweloperami, a nawet ludźmi z biznesu. Pomaga to lepiej zrozumieć siebie nawzajem i swoją pracę, ale przede wszystkim lepiej zrozumieć testowany produkt i efektywnie zwiększyć nasze zaufanie do jego jakości. Zdarza się też, że niektóre firmy piszą testy w języku narodowym (np. po francusku czy niemiecku), aby móc jeszcze dokładniej zdefiniować ich kroki. Nic przecież tak dobrze nie wyjaśnimy, jak w naszym ojczystym języku. Ja jednak odradzam to podejście, gdyż bardzo ogranicza to możliwość podjęcia współpracy z osobami, które tego języka nie znają. Nie wymaga znajomości Pythona i innych języków programowania Język programowania, który nie wymaga umiejętności programowania? Robotowi chyba do tego najbliżej. Z pełną odpowiedzialnością mogę przyznać, że mogą go używać osoby, które nie znają się na programowaniu, ale też muszę mocno zaznaczyć, że zdecydowanie ta umiejętność się przydaje. Nawet jeśli tester jest w stanie stworzyć testy automatyczne, to mogą zaistnieć pewne sytuacje, w których ograniczenia języka nie pozwolą na uzyskanie zamierzonych wyników. W tej sytuacji przychodzi z pomocą Python, który można dowolnie łączyć z kodem Robotowym, zdecydowanie poszerzając jego możliwości. Osobiście znam projekty, w których testerzy automatyzują testy przy użyciu RF, ale mają do pomocy doświadczonego programistę, który w razie przeszkód, pomaga im wprowadzić wymaganą funkcjonalność. Pojęcia zmiennych i zakresu ich widoczności, funkcji oraz parametrów są niezbędne, aby dobrze władać Robotem. Dobry tester jest w stanie wiele wyciągnąć z tego narzędzia, jednak specjalistyczna wiedza programistyczna pozwoli mu wydusić z niego naprawdę ogromne możliwości. Posiada wiele bibliotek rozszerzających możliwości Robot Framework posiada już ponad 300 wbudowanych i gotowych do użycia keywordów wykonujących najczęstsze i najbardziej przydatne operacje. Mimo wszystko społeczność szybko znalazła obszary, w których warto było dopisać nowe biblioteki, które zawierają w sobie dziesiątki kolejnych keywordów. Liczbę takich bibliotek ciężko dokładnie policzyć, gdyż wciąż powstają nowe, a wiele z nich jeszcze nie zostało upublicznionych. Robota można bardzo łatwo wzbogacić o kolejne funkcjonalności, stąd jego potencjał wzrostowy jest naprawdę duży, co na pewno pomoże mu w podboju rynku. Przykładowe biblioteki i ich zastosowanie: SeleniumLibrary – testowanie aplikacji webowych i automatyzacja procesów wykonywanych w przeglądarkachDatabase Library – sprawdzanie wyników zapytań do baz danychHTTP Library – obsługuje mechanizmy zapytań HTTP wykorzystywane do testów REST APIAndroid / iOS Library – biblioteki umożliwiające testowanie urządzeń mobilnychSSHLibrary – pozwala na testowanie maszyn w sposób zdalny Ma czytelną strukturę plików O tym, że bałagan nie pomaga w pracy, wie chyba każdy. Wagę porządku docenia na pewno Pekka Klärck, czyli twórca Robot Framework. Zaimplementował on kilka mechanizmów, które wspierają dobrą organizację testów. Przede wszystkim Robot Framework nie tworzy dziesiątek dodatkowych plików, które są potrzebne do odpowiedniego działania. Tak naprawdę, to nie tworzy żadnych plików (oprócz tych 3 plików przechowujących wyniki, o których już wspomniałem). Ponadto, testy związane z innym komponentem możemy przenieść do oddzielnego pliku, co automatycznie zostanie uznane za dwie różne suity testowe (ang. test suite), czyli zestawy testów. Tak samo możemy niektóre pliki przenieść do osobnych folderów, co również pozwoli nam je pogrupować (np. pod względem rodzaju testów). Same pliki dzielą się na sekcje, które wydzielają nam obszary zmiennych, keywordów i testów, co widać na poniższym przykładzie: *** Variables *** ${NAME} Mateusz *** Test Cases *** Introduce Yourself Say Hello ${NAME} *** Keywords *** Say Hello [Arguments] ${name} Log Hello, ${name} Do dyspozycji jest także tagowanie, czyli oznaczanie testów konkretnym słowem. Pozwala nam to przede wszystkim na sterowanie wykonaniem testów, gdyż możemy uruchomić lub wykluczyć testy z konkretnym tagiem. Tagi są też uwzględnione w raporcie, dzięki czemu możemy podejrzeć statystyki dotyczące konkretnego obszaru testowania. Jest też kilka sposobów na wydzielenie danych do zewnętrznych plików oraz oddzielenie zasobów, które nie są testami (keywordów, zmiennych, bibliotek) do tzw. resource files, ale o tym opowiem innym razem. Jest łatwy w integracji z innymi narzędziami Najpopularniejszy system do automatyzacji procesu budowania i wdrażania oprogramowania, czyli Jenkins, również posiada wtyczkę do Robot Frameworka. Z doświadczenia wiem, że integracja Robota z jakimkolwiek narzędziem jest dość prosta, gdyż jest on oparty o Pythona, czyli jeden z najpopularniejszych języków programowania na świecie, do którego już wiele zostało wymyślone. Istnieją wtyczki podpowiadające składnię w najpopularniejszych środowiskach programistycznych (IDE), są lintery, które sprawdzają czytelność i zgodność kodu z ustalonymi zasadami, są agregatory pozwalające tworzyć przyjazną dokumentację. Liczba narzędzi wspierających Robota stale rośnie, a to wszystko dzięki społeczności programistów, którzy sami integrują różne narzędzia i udostępniają to światu, aby pozwolić innym czerpać korzyści z ich wykonanej pracy. Testy automatyczne to nie wszystko Prosta składnia i łatwa konfiguracja sprawiają, że Robot Framework zyskuje popularność też w innym obszarze – RPA, czyli zrobotyzowanej automatyzacji procesów. Wyobraźmy sobie takie sytuacje… W firmie jest kilkuset pracowników, do których trzeba co miesiąc wysyłać powiadomienie o zaktualizowanie listy wybranych benefitów? Nie trzeba już o tym pamiętać – Robot zrobi to za Ciebie. Twój zespół ma comiesięczne spotkanie, a zdarza się, że niektóre sale są zajęte? Robot sam wyszuka wolną, zarezerwuje i wszystkim wyśle przypomnienie. Prowadzisz arkusz Excela, w którym regularnie dokonujesz analogicznych zmian? To też możesz oddelegować Robotowi 🙂 Automatyzacja sięgnie (prawie) tak daleko, jak Twoja wyobraźnia. Oczywiście musisz zachować w tym pewien rozsądek i nie spędzać czasu na automatyzacji rzeczy, które są zbyt skomplikowane lub charakteryzują się zbyt dużą zmiennością. Może to być mało opłacalne. Zawsze jest miejsce na poprawę Robot Framework powstał w 2005 roku w fińskiej firmie Nokia, by po 3 latach zostać upublicznionym jako oprogramowanie open-source. Od tego czasu liczba jego użytkowników stale rośnie, a w ostatnich latach można zauważyć naprawdę duży przyrost popularności. Otwarte oprogramowanie jest tworzone głównie przez pasjonatów, a jego postęp przyspiesza wraz z wielkością społeczności. Fundacja Robot Framework zrzesza już ponad 40 firm i organizacji, a ostatnio przybywa ich nawet kilka miesięcznie! Każda kolejna wersja oprogramowania przynosi coś nowego, ale wciąż jest jeszcze wiele miejsca na poprawę. Jednymi z najbardziej oczekiwanych ulepszeń są: Pełne wsparcie dla instrukcji warunkowych (obecnie ten mechanizm obsługują keywordy) — funkcjonalność ma być wprowadzona wraz z wersją ale bez problemu można to obejść stosując PythonaZagnieżdżone struktury (np. pętle) — teraz można je uzyskać przy pomocy Pythona, mają pojawić się w Robocie w wersji mniej surowa dokumentacja — nie dla wszystkich jest to wada, jednak wbudowanie do dokumentacji możliwości sortowania lub wyszukiwania po nazwach keywordów byłyby na pewno użytecznymi udogodnieniami Koniec wymówek Istnieje wiele narzędzi do automatyzacji i każde cechuje się czymś innym, ale jak dotąd nie poznałem takiego, które mogłoby konkurować z Robot Framework. Może są takie, które są w stanie w niektórych obszarach wygrać bitwę, ale to Robot Framework ostatecznie wygrywa wojnę 🙂 Jestem w stanie sobie wyobrazić wiele wymówek, które mogą powstrzymywać firmy przed wprowadzeniem automatyzacji i Robot jest właśnie odpowiedzią na te wszystkie obawy. Jest darmowy, łatwy w konfiguracji, prosty w obsłudze (a jednocześnie potężny w możliwościach), szybki w działaniu, przystępny w nauce, wszechstronny i nieskomplikowany w integracji. To właśnie takie technologie sprawiają, że IT jest cool. ? To koniec tego artykułu, ale już teraz zapraszam Cię na kolejne dawki Robot Framework w serii poświęconej automatyzacji. Zapisz się na newsletter, a nic Cię nie ominie 🙂Dla osób głodnych wiedzy, chcących zobaczyć Robot Framework w akcji, zamieszczam wideo z webinaru, który prowadziłem 4 czerwca 2020. Link do webinaru.