Een macro maken en uitvoeren in LibreOffice Calc onder Linux

LibreOffice is het antwoord van de FOSS-wereld op de reguliere en gepatenteerde Microsoft Office Suite. Ontwikkeld door toonaangevende ontwikkelaars en medewerkers van Office Productivity-software, biedt het een volledige vervanging voor Microsoft Office op meerdere besturingssystemen.

Het LibreOffice app-equivalent van Microsoft Excel heet LibreOffice Calc. Het wordt geleverd met een aantal functies en een interface vergelijkbaar met Excel. Het heeft een ingebouwde macro-engine om macro's voor automatisering te ontwikkelen en uit te voeren. Het ondersteunt echter geen Visual Basic, maar ondersteunt zijn eigen taal; LibreOffice Basic, voor het programmeren van macro's.

De LibreOffice-suite is vooraf geïnstalleerd in de meeste Linux-distributies, waaronder Ubuntu, Debian, Fedora en CentOS.

Een macro maken en uitvoeren in LibreOffice Calc

Laten we eerst een werkblad maken met enkele voorbeeldgegevens.

Om de Macro's-organizer te openen, gaat u naar Hulpmiddelen » Macro's » Macro's organiseren » LibreOffice Basics. Het zal de . openen LibreOffice Basic-macro's venster zoals weergegeven in de onderstaande schermafbeelding.

Voer een nieuwe naam in voor de macro en klik vervolgens op de knop Nieuw rechtsonder in het venster.

U zou nu het scherm Macro-editor in LibreOffice Basic moeten zien.

Zoals we kunnen zien, worden handmatig gemaakte macro's standaard gemaakt onder "Mijn macro's en dialoogvensters -> Standaard -> Module1".

Momenteel zijn er twee macro's aanwezig: Een is Voornaamst, wat een standaard lege macro is, en andere is test, de macro die we hierboven hebben gemaakt. We gaan nu de testmacro verbeteren.

Onze macro zal de volgende taken uitvoeren:

  • Controleer welke mensen een beroepschrijver hebben
  • Een nieuw blad maken
  • Verplaats alle vermeldingen voor schrijvers naar een nieuw blad

Hieronder volgt onze macro:

Subtest rem Verplaats items met beroep Schrijver naar nieuw blad dim crs(8) als object dim j as Integer dim prof als object dim i as Integer dim sh als object dim sh2 als object sh = ThisComponent.Sheets(0) crs(0) = sh.getCellRangeByPosition(0, 0, 3, 0) j = 1 for i = 1 tot 5 x = 1 prof = sh.GetCellByPosition(3, i) rem Bewaar volledige rij in variabele If prof.string = "Writer" Dan crs(j) = sh.getCellRangeByPosition(0, i, 3, i) j = j + 1 End If next i rem Maak nu een nieuw blad en schrijf deze gegevens daar 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

Laat me de bovenstaande macro sectie voor sectie aan u uitleggen.

Subtest. . . Einde sub

test is de naam van onze macro, vandaar dat het in de code wordt aangeduid als Subtest (sub = subroutine). Op dezelfde manier eindigen we deze macrocode met statement Einde sub. Merk op dat deze instructies automatisch worden toegevoegd wanneer we een macro vanuit het menu maken, hoewel de gebruiker de macrocode hier direct kan schrijven en de naam van de subroutine zal worden beschouwd als macronaam.

rem 

Alle opmerkingen in LibreOffice Basic beginnen met het trefwoord rem. Een volledige regel die begint met rem wordt als commentaar beschouwd. Een andere manier is om ' (enkele omgekeerde komma) aan het begin van de regel.

dim crs(8) als object dim j als geheel getal dim prof als object dim i als geheel getal dim sh als object dim sh2 als object

Dit is variabele declaratie in LibreOffice Basic. De algemene syntaxis is dimmen als . Gebruik voor het declareren van een array een syntaxis die lijkt op de variabele crs, waarbij 8 de lengte van de array is.

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

Dit onderdeel verwijst naar het huidige document. In dit geval is het een Calc-werkblad. We laden Blad met index 0, d.w.z. het eerste blad, in variabele sh. Er zijn ook functies om een ​​blad met naam te laden.

Vervolgens noemen we functie getCellRangeByPosition van object sh en laad het in array crs. Celbereik verwijst naar een groep cellen in het blad op basis van positie.

Merk op dat de argumenten, 0, 0 (kolom 0, rij 0) geven de startcel van het bereik aan, en 3, 0 (kolom 3, rij 0) geven de eindcel van het bereik aan. Dus 0, 0, 3, 0 verwijst naar de eerste (kop)rij van ons voorbeeldblad.

for i = 1 tot 5 x = 1 prof = sh.GetCellByPosition(3, i) rem Bewaar volledige rij in variabele If prof.string = "Writer" Dan crs(j) = sh.getCellRangeByPosition(0, i, 3, i ) j = j + 1 Einde Indien volgende i

We gebruiken een voor instructie om door de rijen te bladeren. De voor blok eindigt met a De volgende statement, waarmee de variabele i aan het einde van elke iteratie wordt verhoogd.

Vervolgens noemen we een functie GetCellByPositie van object sh. We geven parameters door: (3, ik), d.w.z. bij elke iteratie wordt het object van cel op kolom 3 en rij i opgehaald in variabele prof.

Dan gebruiken we an Als statement om te controleren of de waarde in cel prof "Writer" is. Als dat zo is, noemen we de functie opnieuw getCellRangeByPosition, deze keer, met I in plaats van start- en eindrijnummer. Nogmaals, we slaan het op in de array crs.

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

Eerst maken we een nieuw blad met naam schrijvers, op positie 1, wat de 2e positie is, aangezien index begint bij 0. Dan krijgen we een object van dit nieuw aangemaakte blad, zodat we de gegevens van schrijvers in dit blad kunnen invoeren.

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

De Doen terwijl loop-instructie wordt gebruikt wanneer we willen lussen op basis van voorwaarden, in tegenstelling tot lussen in een reeks gehele waarden, waarvoor gebruik voor zoals eerder getoond. Hier, we lussen tot crs(i) is niet nul.

Vervolgens bellen we weer getCellRangeByPosition op dezelfde manier als voorheen om een ​​bereikobject in het nieuwe blad te krijgen.

Tenslotte noemen we twee functies: getDataArray die de gegevens retourneert van crs(i), d.w.z. één rij gegevens (over een schrijver) van het eerste blad; en we schrijven deze gegevens naar het celbereik in een nieuw blad met behulp van setDataArray.

Sla ten slotte de macro op van Bestand » Alles opslaan optie.

Om de macro uit te voeren, ga naar Hulpmiddelen » Macro's » Macro uitvoeren en selecteer uw macro in de map "Mijn macro's" in de bibliotheek met macroselecties. Klik op de Loop na het selecteren van een macronaam.

Het uitvoeren van de bovenstaande macro op onze voorbeeldspreadsheet levert het volgende resultaat op.

Dit is de manier om macro's te maken in LibreOffice. Raadpleeg de officiële documentatie voor meer informatie en opties.

? Proost!