[[oktatas:programozás:basic:basic_libreoffice|< Basic LibreOffice]]
====== Basic LibrOffice Calc ======
* **Szerző:** Sallai András
* Copyright (c) 2011, Sallai András
* Szerkesztve: 2011,2013
* Licenc: [[https://creativecommons.org/licenses/by-sa/4.0/|CC BY-SA 4.0]]
* Web: https://szit.hu
===== Nyomógombhoz esemény rendelése =====
Lépések:
* Elkészítjük a végrehajtandó makrót
* A munkafüzethez hozzáadjuk a nyomógombot
* A nyomógombhoz rendeljük a makrót
* Használatba vétel
==== Makró elkészítése ====
Eszközök -> Makrók -> Makrók rögzítése ...
A LibreOffice 3.3.2 verzióját használva ez utóbbi menüpont nekem
nem aktív. Makrót persze így is tudok készíteni, csak felvenni nem.
Később így tették ide:
Eszközök -> Beállítások -> Általános -> Kísérleti (instalbil) funkciók engedélyezése
A 3.6.x verziókban már külön jelölőnégyzetet kapott:
Eszközök -> Beállítások -> Általános -> Makrórögzítés engedélyezése (korlátozott)
==== Gomb elhelyezése ====
OpenOffice.org/LibreOffice:
Nézet -> Eszköztárak -> Űrlap-vezérlőelemek
Az előugró kúszóablakon a negyedik ikon a "Vezérlőelemek"
Ezt legördítve tudunk elhelyezni gombokat. A tervező módot ki és
bekapcsolni.
==== A makró és a nyomógomb összerendelése ====
Az elkészült nyomógombhoz eseményt kell rendelnünk.
Ki kell választanunk a nyomógombnak mely eseményéhez
rendeljük a makrót. Célszerűen lehet ez az "Egérgomb
lenyomása".
Szerkesztő módban a nyomógomb felett kattintsunk
jobb egér gombbal, majd az előugró menüből válaszuk a
"Vezérlőelem..." menüpontot. Az előugró ablakban
az "Események" fülre kattintunk. Ott kikeressük
a fenti eseményt (Egérgomb lenyomása), a mellette lévő
gombra kattintunk, amelyen három pont van.
Egy művelet hozzárendelése nevű ablak fog megjelenni.
Ebben a "Makró ..." gombra kattintva megkeressük az
elkészített makrót, majd mindent okézok.
==== Használatba vétel ====
Ha be van kapcsolva az űrlap-vezérlőelemek panel, találunk rajta egy
Tervező mód be/ki gombot. Kapcsoljuk ki a tervező módot és használhatjuk
a gombot.
===== Munkafüzet kezelése Basic-ben =====
A Basic programokat a következő módon írhatunk:
Alt + F11
Vagy:
Eszközök -> Makrók -> Makrók rendezése -> OpenOffice.org Basic...
Az előugró ablakban kiválasztjuk melyik makrót szeretnék szerkeszteni, esetleg
újat kezdünk. Egy új makró elkezdéséhez, az előugró ablakban a "Main" makrónevét
írjuk át saját új makrónévre. Ekkor a "Törlés" gomb "Új" feliratra vált.
A makrók Basic nyelven íródnak. A felvétel mellett mi magunk is
írhatunk ilyen programokat. Ehhez ismernünk kell egy dokumentum szerkezetét
Basic nyelven.
==== Dokumentum felépítése ====
Hozzáférés egy munkafüzet, első munkalapjához:
Dim Dok As Object
Dim Fuzet As Object
Dok = ThisComponent
Fuzet = Dok.Sheets(0)
A példában felveszünk egy Dok és egy Fuzet nevű változót, amelyek objektum típusúak lesznek.
Az Dok magát a Dokumentumot fogja jelképezni, a Fuzet pedig a munkafüzetet. A harmadik sorban
meghatározzuk, hogy a Dok változó milyen objektumra mutasson: ThisComponent, amely az aktuális
dokumentumot jelenti. Az utolsó sorban a megadjuk, hogy a Fuzet változó a dokumentum melyik
munkafüzetére mutasson. A Sheets(0) az első munkafüzetet jelenti. Látható, hogy a munkalapok
számozása 0 értékkel kezdődik.
A munkalapokra azonban hivatkozhatunk nevével is:
Dim Dok As Object
Dim Fuzet As Object
Dok = ThisComponent
Fuzet = Dok.Sheets.getByName("Munkalap1")
==== Dokumentum cellájára hivatkozás ====
Cella = Fuzet.getCellByPosition(0,2)
Esetleg angolosan:
Cell = Sheet.getCellByPosition(0,2)
A munkafüzet első oszlopának száma 0, az első sorának száma 0. Tehát az A1 cellára így hivatkozunk:
Cell = Sheet.getCellByPosition(0,0)
==== A cella egy értékének beállítása ====
Cella.Value = 1000
vagy angolosan:
Cell.Value = 1000
==== Egy lehetséges makró ====
REM ***** BASIC *****
Sub Main
Doc = ThisComponent
Sheet = Doc.Sheets.getByName("Munkalap1")
Cell = Sheet.getCellByPosition(0,2)
Cell.Value = 1000
End Sub
==== Átlag számítás adott tartományban ====
Sub Main
Dok = ThisComponent
Munkalap = Dok.Sheets(0)
CellaTartomany = Munkalap.getCellRangeByName("B2:D5")
MsgBox CellaTartomany.computeFunction(com.sun.star.sheet.GeneralFunction.AVERAGE)
End Sub
==== Egy cella lekérdezése ====
Sub Main
dim sheet as object
dim cell as object
dim doc as object
doc = thiscomponent
sheet = doc.sheets.getbyname("Munkalap1")
cell = sheet.getcellbyposition(0,0)
MsgBox(cell.string, 120, "Címsor")
End Sub
===== Összegzés =====
Sub Main
Sheet = ThisComponent.Sheets(0)
tar = Sheet.getCellRangeByName("A1:A5")
osszeg = 0
for i = 0 to 4
a = tar.getCellByPosition(0,i).value
osszeg = osszeg + a
next i
er = Sheet.getCellRangeByName("A6")
er.Value = osszeg
End Sub
===== Párbeszédablak =====
MsgBox("Kiírandó szöveg", 16, "Címsor szövege")
^ Szám ^ Ikon ^ Gombok ^
| 0 | | Ok |
| 1 | | Ok, Mégse |
| 2 | | Megszakítás, Ismét, Mellőz |
| 3 | | Igen, Nem, Mégse |
| 4 | | Igen, Nem |
| 5 | | Ismét, Mégse |
| 16 | X | Ok |
| 17 | X | Ok, Mégse |
| 18 | X | Megszakítás, Ismét, Mellőzés |
| 19 | X | Igen, Nem, Mégse |
| 20 | X | Igen, Nem |
| 21 | X | Ismét, Mégse |
| 32 | ? | Ok |
| 33 | ? | Ok, Mégse |
| 34 | ? | Megszakítás, Ismét, Mellőzés |
| 35 | ? | Igen, Nem, Mégse |
| 36 | ? | Igen, Nem |
| 37 | ? | Ismét, Mégse |
| 48 | ! | OK |
| 49 | ! | Ok, Mégse |
| 50 | ! | Megszakítás, Ismét, Mellőzés |
| 50 | ! | Igen, Nem, Mégse |
| 51 | ! | Igen, Nem |
| 52 | ! | Ismét, Mégse |
| 64 | izzó | Ok |
==== Egyszerű párbeszédablak ====
Sub Main
print "Valami"
End Sub
===== Bevitel =====
Sub Bevitel
ertek = InputBox("Valai")
MsgBox(ertek)
End Sub
* http://help.libreoffice.org/Basic/InputBox_Function_Runtime/hu
===== Iteráció =====
Sub Main
For i = 1 to 10
print i
Next i
End Sub
===== Matematikai függvények =====
Gyök:
print sqr(9)
A hatvány operátorral oldjuk meg:
a = 3^2
Szám egész része:
print int(3.7) ' Eredmény: 3
===== Véletlenszám =====
Szám 0 és 2 között:
print int(rnd * 3)
Dobókocka:
vel = int(rnd()* 6) + 1
1 és 6 közötti véletlen számot generál
===== Cellába írás =====
Érték írása egy cellába:
thisComponent.Sheets(0).getCellRangeByName("c6").Value = 47
Szöveg írása egy cellába:
thisComponent.Sheets(0).getCellRangeByName("c7").String = "alma"
Képlet írása egy cellába:
thisComponent.Sheets(0).getCellRangeByName("c8").Formula = "=SUM(A2:A5)"
Pozíció megadással:
Sub Main
Sheet = thisComponent.Sheets(0)
Cell = Sheet.getCellByPosition(0, 0) 'Az A1-es cella
Cell.Value = 85
End Sub
Cella koordináta nevének megadásával:
Sub Main
Sheet = thisComponent.Sheets(0)
Cell = Sheet.getCellRangeByName("C5")
Cell.Value = 70
End Sub
===== A GeneralFunction felsorolt típus értékei =====
com.sun.star.sheet.GeneralFunction.SUM
* NONE
* AUTO
* SUM
* COUNT
* AVERAGE
* MAX
* MIN
* PRODUCT -- Minden számréték szorzata
* COUNTNUMS
* STDEV
* STDEVP
* VAR
* VARP
===== Példa1 =====
Sub OsszeadoMakro
Munkafuzet = thisComponent.Sheets(0)
Cella = Munkafuzet.getCellRangeByName("a1")
Cella.Value = 3
Cella = Munkafuzet.getCellRangeByName("a2")
Cella.Value = 2
Cella = Munkafuzet.getCellRangeByName("a3")
Cella.Value = 9
Cella = Munkafuzet.getCellRangeByName("a4")
Cella.Value = 4
Cella = Munkafuzet.getCellRangeByName("a5")
Cella.Value = 7
Cella = Munkafuzet.getCellRangeByName("a6")
Cella.String = "Összeg:"
CellaTartomany = Munkafuzet.getCellRangeByName("a1:a5")
eredmeny = CellaTartomany.computeFunction(com.sun.star.sheet.GeneralFunction.SUM)
Cella = Munkafuzet.getCellRangeByName("b6")
Cella.Value = eredmeny
End Sub
===== Példa2 =====
Cella = thisComponent.Sheets(0).getCellRangeByName("A1")
Cella.String = "Szöveg"
Vagy szám esetén:
Cella.Value = 45
===== Fájlkezelés =====
Dim contentfile as String
Open "c:\uzi.txt" for input as #1
Input #1, contentfile
ThisComponent.Sheets.getByName("Munkalap1").getCellByPosition(0, 0).String = contentfile
Input #1, contentfile
ThisComponent.Sheets.getByName("Munkalap1").getCellByPosition(0, 1).String = contentfile
Close #1
===== Egyéb könyvtárak betöltése =====
BasicLibraries.LoadLibrary("Tools")
DialogLibraries.LoadLibrary( "Standard" )
===== Külső linkek =====
==== Vegyes LibreOffice Basic ====
* http://help.libreoffice.org/Basic/Basic_Help/hu
==== Magyar nyelvű anyag ====
* http://wiki.services.openoffice.org/wiki/HU/Documentation/BASIC_Guide
* http://wiki.services.openoffice.org/wiki/HU/Documentation/BASIC_Guide/Structure_of_Spreadsheets
* http://wiki.services.openoffice.org/wiki/HU/Documentation/BASIC_Guide/Editing_Spreadsheet_Documents
* http://wiki.services.openoffice.org/wiki/HU/Documentation/BASIC_Guide/Formatting_Spreadsheet_Documents
==== Angol nyelvű anyag ====
* http://wiki.services.openoffice.org/wiki/Documentation/BASIC_Guide
* http://wiki.services.openoffice.org/wiki/Documentation/BASIC_Guide/Program_Overview
* http://en.wikipedia.org/wiki/StarOffice_Basic
* http://office-software.suite101.com/article.cfm/automating_openoffice_adding_buttons_to_calc
===== Függelék =====
==== Írunk egy cellába ====
REM ***** BASIC *****
Sub Main
Dok = ThisComponent
Fuzet = Dok.Sheets.getByName("Munkalap1")
Cell = Fuzet.getCellByPosition(0,2)
Cell.Value = 120
End Sub