Makro loomine ja käivitamine Linuxis LibreOffice Calcis

LibreOffice on FOSS-i maailma vastus peavoolu ja patenteeritud Microsoft Office Suite'ile. See on välja töötatud juhtivate Office Productivity tarkvaraarendajate ja kaasautorite poolt ning pakub Microsoft Office'i täielikku asendust mitmes operatsioonisüsteemis.

Microsoft Exceli LibreOffice'i rakenduse ekvivalenti nimetatakse LibreOffice Calciks. Sellel on mitmeid funktsioone ja Exceliga sarnane liides. Sellel on sisseehitatud makromootor, mille abil saab automatiseerimiseks makrosid välja töötada ja käitada. See aga ei toeta Visual Basicut, vaid toetab oma keelt; LibreOffice Basic makrode programmeerimiseks.

LibreOffice'i komplekt on eelinstallitud enamikesse Linuxi distributsioonidesse, sealhulgas Ubuntu, Debian, Fedora ja CentOS.

Makro loomine ja käitamine rakenduses LibreOffice Calc

Esiteks loome mõne näidisandmetega töölehe.

Makrode korraldaja avamiseks minge aadressile Tööriistad » Makrod » Korralda makrosid » LibreOffice'i põhitõed. See avab LibreOffice'i põhimakrod aken, nagu on näidatud alloleval ekraanipildil.

Sisestage makrole uus nimi, seejärel klõpsake akna paremas alanurgas nuppu Uus.

Nüüd peaksite nägema LibreOffice Basicu makroredaktori ekraani.

Nagu näeme, luuakse käsitsi loodud makrod vaikimisi jaotises "Minu makrod ja dialoogid -> standardne -> moodul1".

Praegu on olemas kaks makrot: Üks on Peamine, mis on vaikimisi tühi makro ja muu on katsetada, ülalpool loodud makro. Täiustame nüüd testmakrot.

Meie makro täidab järgmisi ülesandeid:

  • Kontrollige, millistel inimestel on kirjaniku elukutse
  • Looge uus leht
  • Teisalda kõik kirjutajate kirjed uuele lehele

Järgmine on meie makro:

Alamtest rem Teisalda kirjed ametiga Kirjutaja uuele lehele dim crs(8) objektina dim j kui Täisarv dim prof objektina dim i kui Täisarv dim sh objektina dim sh2 objektina sh = ThisComponent.Sheets(0) crs(0) = sh.getCellRangeByPosition(0, 0, 3, 0) j = 1, kui i = 1 kuni 5 x = 1 prof = sh.GetCellByPosition(3, i) rem Salvesta terve rida muutujas If prof.string = "Writer" Siis crs(j) = sh.getCellRangeByPosition(0, i, 3, i) j = j + 1 End If next i rem Nüüd loo uus leht ja kirjuta need andmed sinna 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

Lubage mul ülaltoodud makro teile jaotiste kaupa selgitada.

Alam test. . . Lõpeta alam

katsetada on meie makro nimi, seega on see koodis tähistatud kui Alamtest (alam = alamprogramm). Samamoodi lõpetame selle makrokoodi lausega Lõpeta alam. Pange tähele, et need avaldused lisatakse automaatselt, kui loome menüüst makro, kuigi kasutaja saab makro koodi siia otse kirjutada ja alamprogrammi nime käsitletakse makro nimena.

rem 

Kõik LibreOffice Basicu kommentaarid algavad märksõnaga rem. Kommentaariks loetakse täisrida, mis algab tähega rem. Teine võimalus on kasutada ' (üks pöördkoma) rea alguses.

dim crs(8) objektina dim j täisarvuna dim prof objektina dim i täisarvuna dim sh objektina dim sh2 objektina

See on muutuja deklaratsioon LibreOffice Basicus. Üldine süntaks on hämar kui . Massiivi deklareerimiseks kasutage muutujale crs sarnast süntaksit, kus 8 on massiivi pikkus.

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

See komponent viitab kehtivale dokumendile. Sel juhul on see Calc tööleht. Laadime lehe indeksiga 0, st esimese lehe muutujas sh. Samuti on olemas funktsioonid lehe laadimiseks nime kasutades.

Järgmisena kutsume funktsiooni getCellRangeByPosition objekti sh ja laadige see massiivi crs. Lahtrite vahemik viitab positsioonipõhisele lahtrite rühmale lehel.

Pange tähele, et argumendid, 0, 0 (veerg 0, rida 0) tähistavad vahemiku alguslahtrit ja 3, 0 (veerg 3, rida 0) tähistavad vahemiku lõpplahtrit. Seega 0, 0, 3, 0 viitab meie näidislehe esimesele (pealkirja) reale.

for i = 1 kuni 5 x = 1 prof = sh.GetCellByPosition(3, i) rem Salvestage muutujas terve rida If prof.string = "Writer" Siis crs(j) = sh.getCellRangeByPosition(0, i, 3, i ) j = j + 1 Lõpp Kui järgmine i

Kasutame a jaoks avaldus ridade läbimiseks. The jaoks plokk lõpeb tähega a järgmiseks lause, mis suurendab muutujat i iga iteratsiooni lõpus.

Järgmisena kutsume funktsiooni GetCellByPosition objektist sh. Me edastame parameetrid (3, i), st iga iteratsiooniga tuuakse lahtri objekt veerus 3 ja reas i muutujas prof.

Seejärel kasutame an Kui avaldus, et kontrollida, kas väärtus lahtris prof on "Writer". Kui on, kutsume funktsiooni uuesti välja getCellRangeByPosition, seekord koos i algus- ja lõpurea numbri asemel. Jällegi salvestame selle massiivi crs.

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

Kõigepealt loome uue nimega lehe Kirjanikud, positsioonil 1, mis on 2. positsioon, kuna indeks algab 0-st. Siis saame selle vastloodud lehe objekti, et saaksime sisestada sellele lehele kirjutajate andmed.

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

The Tee Kuigi silmuslauset kasutatakse siis, kui soovime tsüklit teha tingimustel, mitte aga täisarvude väärtuste vahemikus, mille jaoks kasutatakse jaoks nagu varem näidatud. Siin teeme silmust kuni crs(i) ei ole null.

Järgmisena helistame uuesti getCellRangeByPosition sarnasel viisil nagu varem, et saada uuele lehele vahemikuobjekt.

Lõpuks kutsume kahte funktsiooni: getDataArray mis tagastab andmed crs(i), st üks rida andmeid (kirjutaja kohta) esimeselt lehelt; ja kirjutame need andmed lahtrivahemikku uuele lehele kasutades setDataArray.

Lõpuks salvestage makro kohast Fail » Salvesta kõik valik.

Makro käivitamiseks minge aadressile Tööriistad » Makrod » Käivita makro ja valige makrovalija raamatukogu kataloogist "Minu makrod" oma makro. Klõpsake nuppu Jookse nuppu pärast makro nime valimist.

Ülaltoodud makro käivitamine meie näidisarvutustabelis annab järgmise tulemuse.

See on viis makrode loomiseks LibreOffice'is. Lisateabe ja valikute saamiseks vaadake ametlikku dokumentatsiooni.

? Tervist!