Ako vytvoriť a spustiť makro v LibreOffice Calc v systéme Linux

LibreOffice je odpoveďou sveta FOSS na bežný a patentovaný balík Microsoft Office Suite. Vyvinutý poprednými vývojármi a prispievateľmi softvéru Office Productivity, ponúka úplnú náhradu za Microsoft Office na viacerých operačných systémoch.

Ekvivalent aplikácie LibreOffice k programu Microsoft Excel sa nazýva LibreOffice Calc. Dodáva sa s množstvom funkcií a rozhraním podobným Excelu. Má vstavaný makro engine na vývoj a spúšťanie makier pre automatizáciu. Nepodporuje však Visual Basic, ale podporuje svoj vlastný jazyk; LibreOffice Basic na programovanie makier.

Balík LibreOffice je predinštalovaný vo väčšine distribúcií Linuxu vrátane Ubuntu, Debian, Fedora a CentOS.

Vytvorenie a spustenie makra v LibreOffice Calc

Najprv vytvorte pracovný hárok s niekoľkými vzorovými údajmi.

Ak chcete otvoriť organizátor makier, prejdite na Nástroje » Makrá » Usporiadať makrá » Základy LibreOffice. Otvorí sa Základné makrá LibreOffice okno, ako je znázornené na snímke obrazovky nižšie.

Zadajte nový názov makra a potom kliknite na tlačidlo Nové v pravej dolnej časti okna.

Teraz by ste mali vidieť obrazovku editora makier v LibreOffice Basic.

Ako vidíme, manuálne vytvorené makrá sa štandardne vytvárajú v časti „Moje makrá a dialógové okná -> Štandardné -> Modul1“.

V súčasnosti existujú dve makrá: Jedno je Hlavný, čo je predvolené prázdne makro, a iné je test, makro, ktoré sme vytvorili vyššie. Teraz vylepšíme testovacie makro.

Naše makro vykoná nasledujúce úlohy:

  • Skontrolujte, ktorí všetci ľudia majú profesiu spisovateľ
  • Vytvorte nový hárok
  • Presuňte všetky položky pre autorov na nový hárok

Nasleduje naše makro:

Čiastkový test rem Presuňte položky s profesiou Spisovateľ na nový list dim crs(8) ako objekt dim j ako Celé číslo dim prof ako objekt dim i ako Celé číslo sh ako objekt dim sh2 ako objekt sh = ThisComponent.Sheets(0) crs(0) = sh.getCellRangeByPosition(0, 0, 3, 0) j = 1 pre i = 1 až 5 x = 1 prof = sh.GetCellByPosition(3, i) rem Uložiť celý riadok do premennej If prof.string = "Writer" Then crs(j) = sh.getCellRangeByPosition(0, i, 3, i) j = j + 1 Koniec If next i rem Teraz vytvorte nový hárok a napíšte tam tieto údaje ThisComponent.Sheets.insertNewByName("Writers", 1) sh2 = ThisComponent.Sheets(1) i = 0 Urobiť, kým nie IsNull(crs(i)) sh2range = sh2.getCellRangeByPosition(0, i, 3, i) sh2range.setDataArray(crs(i).getDataArray) i = i + 1 Loop End Sub

Dovoľte mi vysvetliť vám vyššie uvedené makro časť po časti.

Čiastkový test. . . End Sub

test je názov nášho makra, preto je v kóde označený ako Čiastkový test (sub = podprogram). Podobne ukončíme tento kód makra príkazom End Sub. Všimnite si, že tieto príkazy sa automaticky pridajú, keď vytvoríme makro z ponuky, hoci používateľ sem môže priamo napísať kód makra a názov podprogramu sa bude považovať za názov makra.

rem 

Všetky komentáre v LibreOffice Basic začínajú kľúčovým slovom rem. Za komentár sa považuje úplný riadok začínajúci na rem. Ďalším spôsobom je použitie ' (jedna obrátená čiarka) na začiatku riadku.

dim crs(8) ako objekt dim j ako Integer dim prof ako objekt dim i ako Integer dim sh ako objekt dim sh2 ako objekt

Toto je deklarácia premennej v LibreOffice Basic. Všeobecná syntax je stlmiť ako . Na deklarovanie poľa použite syntax podobnú premennej crs, kde 8 je dĺžka poľa.

sh = ThisComponent.Sheets(0) crs(0) = sh.getCellRangeByPosition(0, 0, 3, 0) j = 1

Tento Komponent odkazuje na aktuálny dokument. V tomto prípade ide o pracovný hárok Calc. Hárok s indexom 0, t.j. prvý hárok, vkladáme v premennom sh. Existujú aj funkcie na načítanie hárka pomocou názvu.

Ďalej zavoláme funkciu getCellRangeByPosition objektu sh a načítajte ho do poľa crs. Rozsah buniek sa vzťahuje na skupinu buniek v hárku na základe polohy.

Všimnite si, že argumenty, 0, 0 (stĺpec 0, riadok 0) označujú začiatočnú bunku rozsahu a 3, 0 (stĺpec 3, riadok 0) označujú koncovú bunku rozsahu. Teda 0, 0, 3, 0 odkazuje na prvý (nadpisový) riadok nášho vzorového listu.

for i = 1 až 5 x = 1 prof = sh.GetCellByPosition(3, i) rem Uložiť celý riadok do premennej If prof.string = "Writer" Then crs(j) = sh.getCellRangeByPosition(0, i, 3, i ) j = j + 1 Koniec Ak ďalšie i

Používame a pre príkaz na precyklenie riadkov. The pre blok končí a Ďalšie príkaz, ktorý zvyšuje premennú i na konci každej iterácie.

Ďalej zavoláme funkciu GetCellByPosition objektu sh. Odovzdáme parametre (3, i)t.j. pri každej iterácii sa objekt bunky v stĺpci 3 a riadku i nájde v premennej prof.

Potom použijeme an Ak príkaz na kontrolu, či hodnota v bunke prof je „Writer“. Ak áno, znova zavoláme funkciu getCellRangeByPosition, tentoraz, s i namiesto čísla začiatočného a koncového riadku. Opäť ho uložíme do poľa crs.

ThisComponent.Sheets.insertNewByName("Writers", 1) sh2 = ThisComponent.Sheets(1)

Najprv vytvoríme nový list s názvom Spisovatelia, na pozícii 1, čo je 2. pozícia, pretože index začína na 0. Potom dostaneme objekt tohto novovytvoreného listu, aby sme do tohto listu mohli zadať údaje pisateľov.

i = 0 Urobiť, kým nie IsNull(crs(i)) sh2range = sh2.getCellRangeByPosition(0, i, 3, i) sh2range.setDataArray(crs(i).getDataArray) i = i + 1 slučka

The Do Kým príkaz loop sa používa, keď chceme zacykliť na základe podmienok, na rozdiel od zacyklenia v rozsahu celočíselných hodnôt, pre ktoré sa používa pre ako je uvedené vyššie. Tu prejdeme do slučky crs(i) nie je nulový.

Ďalej si znova zavoláme getCellRangeByPosition podobným spôsobom ako predtým, aby ste získali objekt rozsahu v novom hárku.

Nakoniec voláme dve funkcie: getDataArray ktorý vracia údaje z crs(i), teda jeden riadok údajov (o spisovateľovi) z prvého listu; a tieto údaje zapíšeme do rozsahu buniek v novom hárku pomocou setDataArray.

Nakoniec makro uložte z Súbor » Uložiť všetko možnosť.

Ak chcete spustiť makro, prejdite na Nástroje » Makrá » Spustiť makro a vyberte svoje makro z adresára „Moje makrá“ v knižnici výberu makier. Kliknite na Bežať po výbere názvu makra.

Spustenie vyššie uvedeného makra v našej vzorovej tabuľke poskytne nasledujúci výsledok.

Toto je spôsob vytvárania makier v LibreOffice. Ďalšie informácie a možnosti nájdete v oficiálnej dokumentácii.

? Na zdravie!