LibreOffice er FOSS-verdenens svar på den vanlige og proprietære Microsoft Office Suite. Den er utviklet av ledende programvareutviklere og bidragsytere for Office Productivity, og tilbyr en komplett erstatning for Microsoft Office på flere operativsystemer.
LibreOffice app-ekvivalenten til Microsoft Excel kalles LibreOffice Calc. Den kommer med en rekke funksjoner og et grensesnitt som ligner på Excel. Den har en innebygd makromotor for å utvikle og kjøre makroer for automatisering. Den støtter imidlertid ikke Visual Basic, men støtter sitt eget språk; LibreOffice Basic, for programmering av makroer.
LibreOffice-pakken kommer forhåndsinstallert i de fleste Linux-distribusjoner, inkludert Ubuntu, Debian, Fedora og CentOS.
Opprette og kjøre en makro i LibreOffice Calc
La oss først lage et regneark med noen eksempeldata.
For å åpne makroorganiseringen, gå til Verktøy » Makroer » Organiser makroer » Grunnleggende om LibreOffice. Den vil åpne LibreOffice Basic-makroer vindu som vist på skjermbildet nedenfor.
Skriv inn et nytt navn for makroen, og klikk deretter på Ny-knappen nederst til høyre i vinduet.
Du bør nå se makroredigeringsskjermen i LibreOffice Basic.
Som vi kan se, opprettes manuelt opprettede makroer som standard under "Mine makroer og dialoger -> Standard -> Module1".
For øyeblikket er det to makroer til stede: Den ene er Hoved
, som er en standard tom makro, og andre er test
, makroen vi opprettet ovenfor. Vi vil nå forbedre testmakroen.
Makroen vår vil gjøre følgende oppgaver:
- Sjekk hvilke alle mennesker har yrke forfatter
- Opprett et nytt ark
- Flytt alle oppføringer for forfattere i nytt ark
Følgende er vår makro:
Sub test rem Flytt oppføringer med profesjon Writer til nytt ark dim crs(8) som objekt dim j as Integer dim prof som objekt dim i as Integer 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 Lagre hele raden i variabel Hvis prof.streng = "Writer" Deretter crs(j) = sh.getCellRangeByPosition(0, i, 3, i) j = j + 1 End If next i rem Opprett nå et nytt ark og skriv disse dataene 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
La meg forklare makroen ovenfor seksjon for seksjon.
Deltest. . . End Sub
test
er navnet på makroen vår, derfor er den i koden betegnet som Deltest
(sub = subrutine). På samme måte avslutter vi denne makrokoden med uttalelse End Sub
. Merk at disse setningene automatisk legges til når vi lager en makro fra menyen, selv om brukeren kan skrive makrokoden direkte her og subrutinenavnet vil bli betraktet som makronavn.
rem
Alle kommentarer i LibreOffice Basic starter med nøkkelordet rem
. En fullstendig linje som begynner med rem regnes som kommentar. En annen måte er å bruke '
(enkelt omvendt komma) på begynnelsen av linjen.
dim crs(8) som objekt dim j as Integer dim prof som objekt dim i as Integer dim sh som objekt dim sh2 som objekt
Dette er variabel erklæring i LibreOffice Basic. Den generelle syntaksen er svak som
. For å deklarere en matrise, bruk syntaks som ligner på variabelen crs, der 8 er lengden på matrisen.
sh = ThisComponent.Sheets(0) crs(0) = sh.getCellRangeByPosition(0, 0, 3, 0) j = 1
Denne komponenten
viser til gjeldende dokument. I dette tilfellet er det et Calc-regneark. Vi laster Ark med indeks 0, dvs. det første arket, i variabel sh. Det er også funksjoner for å laste et ark med navn.
Neste kaller vi funksjon getCellRangeByPosition
av objekt sh og last det inn i array crs. Celleområde refererer til en gruppe celler i arket basert på posisjon.
Merk at argumentene, 0, 0
(kolonne 0, rad 0) angir startcellen til området, og 3, 0
(kolonne 3, rad 0) angir sluttcellen til området. Og dermed 0, 0, 3, 0
refererer til den første (overskriften) raden på prøvearket vårt.
for i = 1 til 5 x = 1 prof = sh.GetCellByPosition(3, i) rem Lagre hele raden i variabel Hvis prof.string = "Writer" Da crs(j) = sh.getCellRangeByPosition(0, i, 3, i ) j = j + 1 End If neste i
Vi bruker en til
setning for å gå gjennom radene. De til
blokken slutter med en neste
setning, som øker variabelen i ved slutten av hver iterasjon.
Deretter kaller vi en funksjon GetCellByPosition
av objekt sh. Vi passerer parametere (3, i)
, dvs. ved hver iterasjon hentes objektet til celle på kolonne 3 og rad i i variabel prof.
Da bruker vi en Hvis
uttalelse for å sjekke om verdien i celle prof er "Writer". Hvis det er det, kaller vi funksjonen igjen getCellRangeByPosition
, denne gangen, med Jeg
i stedet for start- og sluttradnummer. Igjen lagrer vi det i arrayet crs
.
ThisComponent.Sheets.insertNewByName("Writers", 1) sh2 = ThisComponent.Sheets(1)
Først lager vi et nytt ark med navn Forfattere
, i posisjon 1
, som er den andre posisjonen, da indeksen starter på 0. Da får vi et objekt av dette nyopprettede arket, slik at vi kan legge inn dataene til forfattere i dette arket.
i = 0 Do While not IsNull(crs(i)) sh2range = sh2.getCellRangeByPosition(0, i, 3, i) sh2range.setDataArray(crs(i).getDataArray) i = i + 1 sløyfe
De Gjør mens
loop-setning brukes når vi ønsker å løkke basert på betingelser, i motsetning til løkke i en rekke heltallsverdier, som bruker til
som vist tidligere. Her sløyfer vi till crs(i)
er ikke null.
Deretter ringer vi igjen getCellRangeByPosition
på lignende måte som før for å få et rekkeviddeobjekt i det nye arket.
Til slutt kaller vi to funksjoner: getDataArray
som returnerer dataene fra crs(i)
, dvs. én rad med data (om en forfatter) fra det første arket; og vi skriver disse dataene til celleområdet i nytt ark ved hjelp av setDataArray
.
Til slutt lagrer du makroen fra Fil » Lagre alle alternativ.
For å kjøre makroen, gå til Verktøy » Makroer » Kjør makro og velg din makro fra "Mine makroer"-katalogen i makrovelgerbiblioteket. Klikk på Løpe knappen etter å ha valgt et makronavn.
Å kjøre makroen ovenfor på eksempelregnearket vårt gir følgende resultat.
Dette er måten å lage makroer i LibreOffice. For mer informasjon og alternativer, se den offisielle dokumentasjonen.
? Jubel!