Jak vytvořit a spustit makro v LibreOffice Calc na Linuxu

LibreOffice je odpovědí světa FOSS na mainstreamovou a proprietární sadu Microsoft Office Suite. Vyvinutý předními vývojáři a přispěvateli softwaru Office Productivity nabízí kompletní náhradu za Microsoft Office na více operačních systémech.

Ekvivalent aplikace LibreOffice k aplikaci Microsoft Excel se nazývá LibreOffice Calc. Dodává se s řadou funkcí a rozhraním podobným Excelu. Má vestavěný engine maker pro vývoj a spouštění maker pro automatizaci. Nepodporuje však Visual Basic, ale podporuje svůj vlastní jazyk; LibreOffice Basic pro programování maker.

Sada LibreOffice je předinstalovaná ve většině distribucí Linuxu, včetně Ubuntu, Debianu, Fedory a CentOS.

Vytvoření a spuštění makra v LibreOffice Calc

Nejprve vytvořte pracovní list s několika ukázkovými daty.

Chcete-li otevřít organizátor maker, přejděte na Nástroje » Makra » Uspořádat makra » Základy LibreOffice. Otevře se Základní makra LibreOffice okno, jak je znázorněno na snímku obrazovky níže.

Zadejte nový název makra a poté klepněte na tlačítko Nový v pravé dolní části okna.

Nyní byste měli vidět obrazovku Editor maker v LibreOffice Basic.

Jak vidíme, ručně vytvořená makra jsou ve výchozím nastavení vytvořena pod „Moje makra a dialogy -> Standardní -> Modul1“.

V současné době jsou k dispozici dvě makra: Jedno je Hlavní, což je výchozí prázdné makro, a jiné je test, makro, které jsme vytvořili výše. Nyní vylepšíme testovací makro.

Naše makro bude provádět následující úkoly:

  • Zkontrolujte, kteří všichni lidé mají profesi spisovatele
  • Vytvořte nový list
  • Přesuňte všechny položky pro autory na nový list

Následuje naše makro:

Dílčí test rem Přesunout položky s profesí Writer na nový list dim crs(8) jako objekt dim j jako Integer dim prof jako objekt dim i jako Integer dim sh jako objekt dim sh2 jako objekt sh = ThisComponent.Sheets(0) crs(0) = sh.getCellRangeByPosition(0, 0, 3, 0) j = 1 pro i = 1 až 5 x = 1 prof = sh.GetCellByPosition(3, i) rem Uložte celý řádek do proměnné If prof.string = "Writer" Then crs(j) = sh.getCellRangeByPosition(0, i, 3, i) j = j + 1 End If next i rem Nyní vytvořte nový list a zapište tam tato data ThisComponent.Sheets.insertNewByName("Writers", 1) sh2 = ThisComponent.Sheets(1) i = 0 Do I když ne IsNull(crs(i)) sh2range = sh2.getCellRangeByPosition(0, i, 3, i) sh2range.setDataArray(crs(i).getDataArray) i = i + 1 Loop End Sub

Dovolte mi vysvětlit vám výše uvedené makro po částech.

Dílčí test. . . End Sub

test je název našeho makra, proto je v kódu označen jako Dílčí test (sub = podprogram). Podobně ukončíme tento kód makra příkazem End Sub. Všimněte si, že tyto příkazy jsou automaticky přidány, když vytváříme makro z nabídky, ačkoli uživatel sem může přímo napsat kód makra a název podprogramu bude považován za název makra.

rem 

Všechny komentáře v LibreOffice Basic začínají klíčovým slovem rem. Úplný řádek začínající rem je považován za komentář. Dalším způsobem je použití ' (jedna obrácená čárka) na začátku řádku.

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

Toto je deklarace proměnné v LibreOffice Basic. Obecná syntaxe je ztlumit jako . K deklaraci pole použijte syntaxi podobnou proměnné crs, kde 8 je délka pole.

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

Tato Komponenta odkazuje na aktuální dokument. V tomto případě se jedná o Calc Worksheet. List s indexem 0, tedy první list, vkládáme v proměnné sh. Existují také funkce pro načtení listu pomocí názvu.

Dále zavoláme funkci getCellRangeByPosition objektu sh a načtěte jej do pole crs. Rozsah buněk odkazuje na skupinu buněk v listu na základě pozice.

Všimněte si, že argumenty, 0, 0 (sloupec 0, řádek 0) označují počáteční buňku rozsahu a 3, 0 (sloupec 3, řádek 0) označují koncovou buňku rozsahu. Tím pádem 0, 0, 3, 0 odkazuje na první (nadpisový) řádek našeho vzorového listu.

for i = 1 až 5 x = 1 prof = sh.GetCellByPosition(3, i) rem Uložte celý řádek do proměnné If prof.string = "Writer" Then crs(j) = sh.getCellRangeByPosition(0, i, 3, i ) j = j + 1 Konec Pokud další i

Používáme a pro příkaz pro procházení řádků. The pro blok končí a další příkaz, který zvyšuje proměnnou i na konci každé iterace.

Dále zavoláme funkci GetCellByPosition objektu sh. Předáme parametry (3, i), tj. při každé iteraci je objekt buňky ve sloupci 3 a řádku i načten v proměnné prof.

Poté použijeme an Li příkaz ke kontrole, zda hodnota v buňce prof je „Writer“. Pokud ano, zavoláme funkci znovu getCellRangeByPosition, tentokrát s i místo čísla počátečního a koncového řádku. Znovu jej uložíme do pole crs.

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

Nejprve vytvoříme nový list s názvem Spisovatelé, na pozici 1, což je 2. pozice, protože index začíná na 0. Poté získáme objekt tohoto nově vytvořeného listu, abychom do tohoto listu mohli zadat data pisatelů.

i = 0 Do I když ne IsNull(crs(i)) sh2range = sh2.getCellRangeByPosition(0, i, 3, i) sh2range.setDataArray(crs(i).getDataArray) i = i + 1 smyčka

The Dělat, zatímco Příkaz smyčky se používá, když chceme smyčkovat na základě podmínek, na rozdíl od smyčkování v rozsahu celočíselných hodnot, pro které se používá pro jak bylo ukázáno dříve. Tady se zacyklíme až do crs(i) není nulový.

Dále si znovu zavoláme getCellRangeByPosition podobným způsobem jako dříve, abyste získali objekt rozsahu v novém listu.

Nakonec zavoláme dvě funkce: getDataArray který vrací data z crs(i), tj. jeden řádek dat (o spisovateli) z prvního listu; a tato data zapíšeme do oblasti buněk v novém listu pomocí setDataArray.

Nakonec makro uložte z Soubor » Uložit vše volba.

Chcete-li spustit makro, přejděte na Nástroje » Makra » Spustit makro a vyberte své makro z adresáře „My Macros“ v Knihovně výběru maker. Klikněte na Běh po výběru názvu makra.

Spuštěním výše uvedeného makra v naší ukázkové tabulce vznikne následující výsledek.

Toto je způsob, jak vytvářet makra v LibreOffice. Další informace a možnosti naleznete v oficiální dokumentaci.

? Na zdraví!