Sådan opretter og kører du en makro i LibreOffice Calc på Linux

LibreOffice er FOSS-verdenens svar på den almindelige og proprietære Microsoft Office Suite. Den er udviklet af førende Office Productivity-softwareudviklere og bidragydere og tilbyder en komplet erstatning for Microsoft Office på flere operativsystemer.

LibreOffice-appen, der svarer til Microsoft Excel, hedder LibreOffice Calc. Den kommer med en række funktioner og en grænseflade, der ligner Excel. Den har en indbygget makromotor til at udvikle og køre makroer til automatisering. Den understøtter dog ikke Visual Basic, men understøtter sit eget sprog; LibreOffice Basic, til programmering af makroer.

LibreOffice-pakken kommer forudinstalleret i de fleste Linux-distributioner, inklusive Ubuntu, Debian, Fedora og CentOS.

Oprettelse og kørsel af en makro i LibreOffice Calc

Lad os først oprette et regneark med nogle eksempeldata.

For at åbne Makro-arrangøren skal du gå til Værktøjer » Makroer » Organiser makroer » LibreOffice Basics. Det vil åbne LibreOffice Basic-makroer vindue som vist på skærmbilledet nedenfor.

Indtast et nyt navn til makroen, og klik derefter på knappen Ny i nederste højre side af vinduet.

Du skulle nu se makroredigeringsskærmen i LibreOffice Basic.

Som vi kan se, oprettes manuelt oprettede makroer som standard under "Mine makroer og dialogbokse -> Standard -> Modul1".

I øjeblikket er der to makroer til stede: Den ene er Hoved, som er en standard tom makro, og andet er prøve, den makro, vi oprettede ovenfor. Vi vil nu forbedre testmakroen.

Vores makro vil udføre følgende opgaver:

  • Tjek hvilke alle mennesker har profession forfatter
  • Opret et nyt ark
  • Flyt alle indgange for forfattere i nyt ark

Følgende er vores makro:

Sub test rem Flyt poster med profession Writer til nyt ark dim crs(8) som objekt dim j som heltal dim prof som objekt dim i som heltal dim sh som objekt dim sh2 som objekt sh = ThisComponent.Sheets(0) crs(0) = sh.getCellRangeByPosition(0, 0, 3, 0) j = 1 for i = 1 til 5 x = 1 prof = sh.GetCellByPosition(3, i) rem Gem komplet række i variabel Hvis prof.streng = "Writer" Så crs(j) = sh.getCellRangeByPosition(0, i, 3, i) j = j + 1 End If next i rem Opret nu et nyt ark og skriv disse data der ThisComponent.Sheets.insertNewByName("Writers", 1) sh2 = ThisComponent.Sheets(1) i = 0 Do While not IsNull(crs(i)) sh2range = sh2.getCellRangeByPosition(0, i, 3, i) sh2range.setDataArray(crs(i).getDataArray) i = i + 1 Loop End Sub

Lad mig forklare ovenstående makro for dig afsnit for afsnit.

Underprøve. . . Slut Sub

prøve er navnet på vores makro, derfor er det i koden betegnet som Underprøve (sub = subrutine). På samme måde afslutter vi denne makrokode med sætning Slut Sub. Bemærk, at disse udsagn automatisk tilføjes, når vi opretter en makro fra menuen, selvom brugeren kan skrive makrokoden direkte her, og underrutinenavnet vil blive betragtet som makronavn.

rem 

Alle kommentarer i LibreOffice Basic starter med nøgleordet rem. En komplet linje, der begynder med rem, betragtes som kommentar. En anden måde er at bruge ' (enkelt omvendt komma) i starten af ​​linjen.

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

Dette er variabel erklæring i LibreOffice Basic. Den generelle syntaks er dæmpet som . For at erklære et array skal du bruge syntaks svarende til variablen crs, hvor 8 er længden af ​​arrayet.

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

Denne komponent henviser til det aktuelle dokument. I dette tilfælde er det et Calc-arbejdsark. Vi indlæser Ark med indeks 0, dvs. det første ark, i variabel sh. Der er også funktioner til at indlæse et ark med navn.

Dernæst kalder vi funktion getCellRangeByPosition af objekt sh og indlæs det i array crs. Celleområde refererer til en gruppe af celler i arket baseret på position.

Bemærk, at argumenterne, 0, 0 (kolonne 0, række 0) angiver startcellen i området, og 3, 0 (kolonne 3, række 0) angiver intervallets slutcelle. Dermed 0, 0, 3, 0 refererer til første (overskrift) række i vores prøveark.

for i = 1 til 5 x = 1 prof = sh.GetCellByPosition(3, i) rem Gem komplet række i variabel Hvis prof.string = "Writer" Så crs(j) = sh.getCellRangeByPosition(0, i, 3, i ) j = j + 1 Slut Hvis næste i

Vi bruger en til sætning til at gå gennem rækkerne. Det til blok slutter med en Næste sætning, som øger variablen i ved slutningen af ​​hver iteration.

Dernæst kalder vi en funktion GetCellByPosition af objekt sh. Vi videregiver parametre (3, i), dvs. ved hver iteration hentes cellens objekt på kolonne 3 og række i i variabel prof.

Så bruger vi en Hvis sætning for at kontrollere, om værdien i celle prof er "Writer". Hvis det er, kalder vi igen funktionen getCellRangeByPosition, denne gang med jeg i stedet for start- og slutrækkenummer. Igen gemmer vi det i arrayet crs.

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

Først laver vi et nyt ark med navn Forfattere, ved position 1, som er den 2. position, da indeks starter ved 0. Så får vi et objekt af dette nyoprettede ark, så vi kan indtaste data for forfattere i dette ark.

i = 0 Do While not IsNull(crs(i)) sh2range = sh2.getCellRangeByPosition(0, i, 3, i) sh2range.setDataArray(crs(i).getDataArray) i = i + 1 loop

Det Gøre imens loop-sætning bruges, når vi ønsker at loope baseret på betingelser, i modsætning til looping i en række heltalværdier, hvortil brug til som vist tidligere. Her sløjfer vi indtil crs(i) er ikke nul.

Dernæst ringer vi igen getCellRangeByPosition på samme måde som før for at få et rækkeobjekt i det nye ark.

Til sidst kalder vi to funktioner: getDataArray som returnerer data fra crs(i), dvs. én række data (om en forfatter) fra det første ark; og vi skriver disse data til celleområdet i nyt ark ved hjælp af setDataArray.

Gem endelig makroen fra Filer » Gem alle mulighed.

Gå til for at køre makroen Værktøjer » Makroer » Kør makro og vælg din makro fra mappen "Mine makroer" i biblioteket Makrovælger. Klik på Løb knappen efter at have valgt et makronavn.

At køre ovenstående makro på vores eksempelregneark giver følgende resultat.

Dette er måden at oprette makroer i LibreOffice. For mere information og muligheder henvises til den officielle dokumentation.

? Skål!