[[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