PORADNIK UŻYTKOWNIKA PAKIETU OPENOFFICE.

 

PIERWSZE KROKI W PISANIU MAKROPOLECEŃ

 

CZĘŚĆ I

 

 

 

Cały poradnik składa się z 2 części zawierający część opisową w formacie PDF oraz kilkadziesiąt plików z przykładami w formacie OpenOffice.

Poniżej prezentujemy fragmenty 1 części poradnika.

 

Jeśli chcesz otrzymać poradnik część I i II to wpłać na

konto MHD

nr 50 1020 5558 1111 1515 0080 0009

kwotę 30,00zł

oraz wyślij emaila z informacją o wpłacie i podaniem adresu email na jaki przesłać poradnik.

Twoje konto email powinno przyjmować pocztę o wielkości 2MB

 

Możesz też skorzystać z mojej aukcji na Allegro:

Allegro

 

Przykładowe makra z części II poradnika i inne

 

UWAGA!!!

Pliki niekiedy ściągają się z rozszerzeniem ZIP i należy to rozszerzenie zmienić na SXC. Niektóre przeglądarki traktują te pliki jako tekstowe do wyświetlenia i wtedy należy zrobić Prawo-Klik myszką i wybrać „Zapisz plik docelowy jako...”

 

Kalkulator

Kalkulator.sxc

 

Rozszerzone narzędzie Xray pomocne przy pisaniu makr

CharakterystykiFormatow_Xray.sxc

 

Instalator dodatkowych Funkcji Calca sprawdzających poprawność numerów

PESEL, NIP, REGON, IBAN i Dowodu Osobistego

Instal_CK IBAN NIP_PESEL_REGON_DO.sxc

 

Makro pozwalające wysłać zaznaczony fragment arkusza Calca jako treść emaila

InstalMakraZaznaczenieJakoMail.sxc

 

OpenOffice 1.1.4

http://www.idg.pl/ftp/pc_7399/OpenOffice.1.1.4.pl.html

 

 

 

 

 

Mirosław Hornik

mhd1@o2.pl


I........................................................................................................................................... Wstęp.. 4

II................................................................................... Nagrywanie najprostszych makr. 5

III...................................................................... Pierwsze pisane własnoręcznie makro. 8

1. Zaczniemy od makra, w którym odczytamy wartość z komórki arkusza i wyświetlimy w oknie informacyjnym. 8

2............................................................... Teraz uprościmy makro, które nagraliśmy na wstępie. 9

3..................................................................................................... Czyszczenie komórek arkusza. Błąd! Nie zdefiniowano zakładki.

4..................................................................................................................................... Kopiowanie. Błąd! Nie zdefiniowano zakładki.

IV........................................ Przykłady działań na zmiennych pobranych z arkusza.. Błąd! Nie zdefiniowano zakładki.

1............................................................................................................................ Zadanie pierwsze. Błąd! Nie zdefiniowano zakładki.

2.............................................................................................................................. Zadanie drugie. Błąd! Nie zdefiniowano zakładki.

3............................................................................................................................... Zadanie trzecie. Błąd! Nie zdefiniowano zakładki.

V...................... Co zrobić gdy w Openoffice zabraknie potrzebnej nam funkcji?.. Błąd! Nie zdefiniowano zakładki.

1............................................................................................................................. Zadanie czwarte. Błąd! Nie zdefiniowano zakładki.

2................................................................................................................................. Zadanie piąte. Błąd! Nie zdefiniowano zakładki.

VI. Funkcje wejścia i wyjścia ekranowego. Czyli inny sposób wprowadzania danych i pokazywania wyniku. Błąd! Nie zdefiniowano zakładki.

1........................................................................................................................... Funkcja MsgBox. Błąd! Nie zdefiniowano zakładki.

2.......................................................................................................................... Funkcja InputBox. Błąd! Nie zdefiniowano zakładki.

VII. Funkcje wejścia i wyjścia plików. Czyli jak przekazać dane dla innych w uniwersalnym formacie. Błąd! Nie zdefiniowano zakładki.

1..................................................................................................... Wysyłanie danych na zewnątrz. Błąd! Nie zdefiniowano zakładki.

2......................................................................................... Pobieranie danych z pliku tekstowego. Błąd! Nie zdefiniowano zakładki.

VIII.......................................................... Przydatne makra i przykłady zastosowania.. Błąd! Nie zdefiniowano zakładki.

1............................................................................................................ Zapis i zamykanie arkusza. Błąd! Nie zdefiniowano zakładki.

2............................................................................. Eksport do PDF bez okna opcji (Przykład_11) Błąd! Nie zdefiniowano zakładki.

3.................................................................................... Sprawdzenie jaka komórka jest aktywna. Błąd! Nie zdefiniowano zakładki.

4....................................................................................... Zmiana grubości czcionki (Przykład_13) Błąd! Nie zdefiniowano zakładki.

5.......................................................................................................................... Scalanie komórek. Błąd! Nie zdefiniowano zakładki.

6............................................................................................................. Zapisz jako (Przykład_15) Błąd! Nie zdefiniowano zakładki.

7......................................................................................................... Jaka drukarka jest wybrana. Błąd! Nie zdefiniowano zakładki.


 

I.                              Wstęp

 

Poradnik ten przeznaczony jest dla użytkowników początkujących jak też dla średnio zaawansowanych. Jako użytkownik średnio zaawansowany pakietu Openoffice postaram się tu wyjaśnić w sposób przystępny (łopatologiczny) zastosowanie makr w codziennym użytku, mających na celu ułatwienie normalnemu człowiekowi pracy. Jedni mądrzy ludzie tworzą program, który ma ułatwić życie a inni wydają poradniki, które są wstanie skomplikować nawet najprostszą czynność.

 

W tym poradniku skupię się przede wszystkim na arkuszu kalkulacyjnym Callc, gdyż to narzędzie jest najczęściej używane do przetwarzania danych. W procesie przetwarzania danych nieocenioną przysługę sprawi każdemu podstawowa znajomość pisania makropoleceń w basicu zaimplementowanym (dołączonym) w OpenOffice.

 

Nie będę tu szczegółowo opisywał wszystkich funkcji bo nie to jest moim celem. Po opis składni i znaczenie wszystkich dostępnych funkcji odsyłam do pomocy w języku polskim zawartej w pakiecie OpenOffice 2.1. Ja natomiast zajmę się praktycznym wykorzystaniem najczęściej stosowanych funkcji i pokazaniem na przykładach do jakiego celu możemy je zastosować.

 

Wszystkie przykładowe pliki są wykonane w OpenOffice 1.1.4 po to aby i ci z Was co mają słabsze komputery mogli skorzystać z tego poradnika.

 

W pierwszej części poradnika zajmiemy się podstawami pisania makropoleceń i przykładami ich zastosowania. W części drugiej znajdującej się na następnym CD zajmiemy się już bardziej zaawansowanymi przykładami tworzenia okiem dialogowych, które mogą być zastosowane jak profesjonalne programy.


 

II.                                Nagrywanie najprostszych makr.

 

Dla nauki otwieramy OpenOffice Calc i zapisujemy arkusz jako „test”.

Najprostsze makra możemy nagrać poprzez polecenie z menu Narzędzia/Makra/Zarejestruj makro. Po uruchomieniu tej funkcji wszystko (prawie wszystko) co będziemy wykonywać w arkuszu zostanie nagrane jak na magnetofon i potem można to w każdej chwili uruchomić. Po zakończeniu nagrywania program otworzy okienko w celu zapisania nagrania.

 

Nasz arkusz zapisaliśmy pod nazwą test.ods(dla OpenOffice 2.1 a dla OpenOffice 1.1 będzie to test.sxc) i aby zapisać nagrane makro w tym właśnie arkuszu to należy kliknąć na znaczek „+” i zobaczymy tam bibliotekę (tak to się nazywa) „Standard”. Zaznaczamy ją i w okienku powyżej „Nazwa makra” wpisujemy nazwę naszego makra. Klikamy na Zapis i program jeszcze zaproponuje nam nazwę modułu „Module1” i zapisze nasze makro. Można makro zapisać w innym miejscu, ale to już jest wyższa szkoła jazdy i wykracza poza zakres tego poradnika. Tak zapisane makro będzie zawsze dostępne w arkuszu zapisanym jako „test”.

Tak zapisane makro możemy wywołać do ponownego wykonania poprzez wybranie z menu Narzędzia/Makra/Wykonaj makro.

 

 

Wyszukujemy nasze makro i klikamy „Uruchom”. Wcześniej nagrane czynności zostaną ponownie wykonane.

 

W ten sposób nagrane makro może wykonywać proste zadania ale jest mało efektywne. Ma długi kod i nie zawsze spełnia nasze oczekiwania. Tym sposobem zostało nagrane makro wpisujące w komórki od A1 do A4 kolejne cyfry i kod tego makra przedstawia się następująco:

 

sub mojeMakro

rem ----------------------------------------------------------------------

rem define variables

dim document   as object

dim dispatcher as object

rem ----------------------------------------------------------------------

rem get access to the document

document   = ThisComponent.CurrentController.Frame

dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

 

rem ----------------------------------------------------------------------

dim args1(0) as new com.sun.star.beans.PropertyValue

args1(0).Name = "ToPoint"

args1(0).Value = "$A$1"

 

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())

 

rem ----------------------------------------------------------------------

dim args2(0) as new com.sun.star.beans.PropertyValue

args2(0).Name = "StringName"

args2(0).Value = "1"

 

dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args2())

 

rem ----------------------------------------------------------------------

dim args3(1) as new com.sun.star.beans.PropertyValue

args3(0).Name = "By"

args3(0).Value = 1

args3(1).Name = "Sel"

args3(1).Value = false

 

dispatcher.executeDispatch(document, ".uno:GoDown", "", 0, args3())

 

rem ----------------------------------------------------------------------

dim args4(0) as new com.sun.star.beans.PropertyValue

args4(0).Name = "StringName"

args4(0).Value = "2"

 

dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args4())

 

rem ----------------------------------------------------------------------

dim args5(1) as new com.sun.star.beans.PropertyValue

args5(0).Name = "By"

args5(0).Value = 1

args5(1).Name = "Sel"

args5(1).Value = false

 

dispatcher.executeDispatch(document, ".uno:GoDown", "", 0, args5())

 

rem ----------------------------------------------------------------------

dim args6(0) as new com.sun.star.beans.PropertyValue

args6(0).Name = "StringName"

args6(0).Value = "3"

 

dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args6())

 

rem ----------------------------------------------------------------------

dim args7(1) as new com.sun.star.beans.PropertyValue

args7(0).Name = "By"

args7(0).Value = 1

args7(1).Name = "Sel"

args7(1).Value = false

 

dispatcher.executeDispatch(document, ".uno:GoDown", "", 0, args7())

 

rem ----------------------------------------------------------------------

dim args8(0) as new com.sun.star.beans.PropertyValue

args8(0).Name = "StringName"

args8(0).Value = "4"

 

dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args8())

 

rem ----------------------------------------------------------------------

dim args9(1) as new com.sun.star.beans.PropertyValue

args9(0).Name = "By"

args9(0).Value = 1

args9(1).Name = "Sel"

args9(1).Value = false

 

dispatcher.executeDispatch(document, ".uno:GoDown", "", 0, args9())

 

 

end sub

 

Proponuję tu nie wnikać w szczegóły tego kodu, gdyż jest mało zrozumiały a ma wykonywać prostą czynność. Poniżej małymi kroczkami dojdziemy do napisania makra wykonującego to samo w wiele prostszy sposób.

 


 

III.                            Pierwsze pisane własnoręcznie makro.

 

Pomoc w OpenOffice nakazuje deklarowanie zmiennych wykorzystywanych w makrach, jednak nie jest to warunek tak bardzo niezbędny przy pisaniu mniej skomplikowanych makr. Zainteresowanych zasadami deklaracji zmiennych odsyłam do Pomocy.

 

W celu pisania makra należy uruchomić OpenOffice Basic. W tym celu w menu wybieramy Narzędzia/Makra/Zarządzaj Makrami/OpenOffice Basic (dla OO 2.1) a dla OO 1.1.4 wybieramy Narzędzia/Makra/Makro i tam odszukujemy nazwę naszego arkusza i w bibliotece „Standard” klikamy „Nowy” akceptujemy to co się ukaże OK. i otworzy się okno Basic.

 

Teraz możemy zacząć pisać makro. Makro zaczynamy instrukcja SUB „nazwa” i kończymy End Sub:

 

Sub mojeMakro1

.

.

.

End Sub

 

1.                                                                                          Zaczniemy od makra, w którym odczytamy wartość z komórki arkusza i wyświetlimy w oknie informacyjnym.

 

Odczytanie wartości komórki A6

 

  oDocument=ThisComponent               'wyróżnienie aktywnego dok. (=>Selection)

  oSheet=oDocument.Sheets.getByName("Arkusz1")     'wyróżnienie arkusza nr1

  oCell=oSheet.getCellByPosition(0,5)                           'wyróżnienie komórki A6

  Z=oCell.getValue              ‘przypisanie wartości LICZBOWEJ do zmiennej Z

 

Natomiast:

  Z=oCell.getString              ‘przypisanie wartości TEKSTOWEJ do zmiennej Z

 

W przypadku próby przypisania wartości TEKSTOWEJ do zmiennej LICZBOWEJ otrzymamy „0” a w przypadku odwrotnym otrzymamy liczbę ale zapisaną jako tekst i nie będzie można na niej wykonywać działań.

 

W przykładzie powyżej, wyróżnienie komórki A6 jest dokonane poprzez podanie jej pozycji KOLUMNA=>0, WIERSZ=>5. W OO inaczej niż w Ecelu są numerowane kolumny i wiersze. Numeracja zaczyna się od „0”.

Tą samą komórkę A6 możemy wybrać poprzez rozkaz:

 

oCell=oSheet.getCellRangeByName(„A6”)                               'wyróżnienie komórki A6

 

Zwróć uwagę, że oDocument, oSeet, oCell to też są zmienne do których są dopisane fragmenty kodu basic i całkiem poprawny będzie też zapis:

 

Z= ThisComponent.Sheets.getByName("Arkusz1").getCellByPosition(0,5).getValue

 

Ale taki zapis jest mało czytelny.

 

No to już wiemy jak odczytać zawartość komórki. Teraz musimy jakoś pokazać co odczytaliśmy. Do tego służy instrukcja MsgBox. W najprostszej formie będzie to wyglądać tak:

 

MsgBox Z

 

Cały kod naszego pierwszego makra wygląda tak:

 

Sub mojeMakro1

 

  oDocument=ThisComponent               'wyróżnienie aktywnego dok. (=>Selection)

  oSheet=oDocument.Sheets.getByName("Arkusz1")     'wyróżnienie arkusza nr1

  oCell=oSheet.getCellByPosition(0,5)                           'wyróżnienie komórki A6

  Z=oCell.getValue                              'przypisanie wartości LICZBOWEJ do zmiennej Z

 

  MsgBox Z & " To jest zmienna typu LICZBA"

 

  Z=oCell.getString                             'przypisanie wartości TEKSTOWEJ do zmiennej Z

 

 

  MsgBox Z & " To jest zmienna typu TEKSTOWEGO"

 

End Sub

 

Teraz aby nam się łatwo uruchamiało makro wstawimy do naszego arkusza przycisk i przypiszemy do niego nasze makro. Zakładam, że każdy sobie poradzi w odszukaniu Formatów Formularza i znajdzie tam ikonę wstawiania przycisku. Wstawiamy przycisk i klikamy na nim prawym klawiszem i wybieramy „Format” oraz przechodzimy do zakładki „Wydarzenia”. Wyszukujemy „Naciśnięto przycisk myszy” i klikamy na przycisk za polem edycyjnym. Pokaże się okno jak niżej:

 

Zaznaczamy tak jak na rysunku i klikamy „Przypisz” a potem OK. Mamy już przypisane makro do przycisku. Jeszcze tylko trzeba wyłączyć TRYB PROJEKTU i możemy wypróbować nasze makro.

 

Teraz proszę uruchomić arkusz Przykład_1.sxc i wpisać w żółte pole liczbę np.: 123,34 i nacisnąć przycisk.

Przy wpisanej liczbie praktycznie nie widać różnicy w obu komunikatach. Wpiszmy dla odmiany słowo TEKST. I teraz widzimy różnicę pomiędzy zmienną typu „Value” a „String”. W przypadku zmiennej typu „Value” zamiast tekstu wpisanego do komórki wynikiem jest „0”

 

 

2.                                                                                          Teraz uprościmy makro, które nagraliśmy na wstępie.

 

Wpierw nauczymy się przypisywać wartość ze zmiennej do komórki czyli coś odwrotnego od tego co robiliśmy wyżej.

 

  oDocument=ThisComponent               'wyróżnienie aktywnego dok. (=>Selection)

  oSheet=oDocument.Sheets.getByName("Arkusz1")     'wyróżnienie arkusza nr1

  oCell=oSheet.getCellRangeByName(„A6”)                             'wyróżnienie komórki A6

  oCell.setValue (Z)                            'przypisanie zmiennej LICZBOWEJ „Z” do komórki

 

Pobranie zmiennej z komórki jest poprzez Get.Value a przypisanie zmiennej do komórki poprzez SetValue.

Zamiast zmiennej możemy przypisać po prostu liczbę:

 

oCell.setValue (12)                            'przypisanie liczby do komórki

 

 

Nasze makro zastępujące to z początku wykładu będzie wyglądać następująco:

 

Sub mojeMakro2

 

  oDocument=ThisComponent               'wyróżnienie aktywnego dok. (=>Selection)

  oSheet=oDocument.Sheets.getByName("Arkusz1")     'wyróżnienie arkusza nr1

  oCell=oSheet.getCellRangeByName("A1")                             'wyróżnienie komórki A1

  oCell.setValue (1)                              'przypisanie wartości LICZBOWEJ do komórki

 

  oCell=oSheet.getCellRangeByName("A2")                             'wyróżnienie komórki A2

  oCell.setValue (2)                              'przypisanie wartości LICZBOWEJ do komórki

 

  oCell=oSheet.getCellRangeByName("A3")                             'wyróżnienie komórki A3

  oCell.setValue (3)                              'przypisanie wartości LICZBOWEJ do komórki

 

  oCell=oSheet.getCellRangeByName("A4")                             'wyróżnienie komórki A4

  oCell.setValue (4)                              'przypisanie wartości LICZBOWEJ do komórki

 

 

End Sub

 

Prawda ze jest o wiele krótsze i bardziej przejrzyste!?