Makron luominen ja suorittaminen LibreOffice Calcissa Linuxissa

LibreOffice on FOSS-maailman vastaus valtavirran ja omaan Microsoft Office Suiteen. Johtavien Office Productivity -ohjelmistokehittäjien ja -avustajien kehittämä se tarjoaa täydellisen korvaavan Microsoft Officen useissa käyttöjärjestelmissä.

Microsoft Exceliä vastaava LibreOffice-sovellus on nimeltään LibreOffice Calc. Siinä on useita ominaisuuksia ja Excelin kaltainen käyttöliittymä. Siinä on sisäänrakennettu makromoottori automaation makrojen kehittämiseen ja käyttämiseen. Se ei kuitenkaan tue Visual Basicia, mutta tukee omaa kieltään; LibreOffice Basic makrojen ohjelmointiin.

LibreOffice-paketti on esiasennettu useimpiin Linux-jakeluihin, mukaan lukien Ubuntu, Debian, Fedora ja CentOS.

Makron luominen ja suorittaminen LibreOffice Calcissa

Luodaan ensin laskentataulukko, jossa on joitakin esimerkkitietoja.

Avaa makrojen järjestäjä siirtymällä kohtaan Työkalut » Makrot » Järjestä makrot » LibreOffice Basics. Se avaa LibreOfficen perusmakrot ikkuna alla olevan kuvakaappauksen mukaisesti.

Anna makrolle uusi nimi ja napsauta sitten Uusi-painiketta ikkunan oikeassa alakulmassa.

Sinun pitäisi nyt nähdä Makroeditorin näyttö LibreOffice Basicissa.

Kuten näemme, manuaalisesti luodut makrot luodaan oletusarvoisesti kohdassa "Omat makrot ja valintaikkunat -> Vakio -> Moduuli1".

Tällä hetkellä käytössä on kaksi makroa: Yksi on Main, joka on oletuksena tyhjä makro, ja muut ovat testata, edellä luomamme makro. Parannamme nyt testimakroa.

Makromme suorittaa seuraavat tehtävät:

  • Tarkista, millä kaikilla ihmisillä on ammattikirjoittaja
  • Luo uusi taulukko
  • Siirrä kaikki kirjoittajien merkinnät uuteen taulukkoon

Seuraava on makromme:

Alatesti rem Siirrä merkinnät ammattilla Writer uudelle taulukolle dim crs(8) objektina dim j kokonaislukuna dim prof objektina dim i kokonaislukuna dim sh objektina dim sh2 objektina sh = ThisComponent.Sheets(0) crs(0) = sh.getCellRangeByPosition(0, 0, 3, 0) j = 1 i = 1 - 5 x = 1 prof = sh.GetCellByPosition(3, i) rem Tallenna koko rivi muuttujaan If prof.string = "Writer" Sitten crs(j) = sh.getCellRangeByPosition(0, i, 3, i) j = j + 1 End If next i rem Luo nyt uusi taulukko ja kirjoita tiedot sinne ThisComponent.Sheets.insertNewByName("Kirjoittajat", 1) sh2 = ThisComponent.Sheets(1) i = 0 Tee vaikka ei IsNull(crs(i)) sh2range = sh2.getCellRangeByPosition(0, i, 3, i) sh2range.setDataArray(crs(i).getDataArray) i = i + 1 Loop End Sub

Selitän sinulle yllä olevan makron osioittain.

Alatesti. . . Lopeta ala

testata on makromme nimi, joten koodissa se on merkitty nimellä Alatesti (ali = aliohjelma). Vastaavasti lopetamme tämän makrokoodin lauseeseen Lopeta ala. Huomaa, että nämä lauseet lisätään automaattisesti, kun luomme makron valikosta, vaikka käyttäjä voi kirjoittaa makrokoodin suoraan tähän ja aliohjelman nimeä pidetään makron nimenä.

rem 

Kaikki kommentit LibreOffice Basicissa alkavat avainsanalla rem. Täydellinen rem alkava rivi katsotaan kommentiksi. Toinen tapa on käyttää ' (yksi käänteinen pilkku) rivin alussa.

dim crs(8) objektina dim j kokonaislukuna dim prof objektina dim i kokonaislukuna dim sh objektina dim sh2 objektina

Tämä on muuttujan ilmoitus LibreOffice Basicissa. Yleinen syntaksi on himmeä kuin . Käytä taulukon ilmoittamiseen samanlaista syntaksia kuin muuttuja crs, jossa 8 on taulukon pituus.

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

Tämä komponentti viittaa nykyiseen asiakirjaan. Tässä tapauksessa se on Calc-työtaulukko. Lataamme Sheetin indeksillä 0, eli ensimmäisen arkin muuttujassa sh. On myös toimintoja taulukon lataamiseen nimellä.

Seuraavaksi kutsumme funktiota getCellRangeByPosition objektin sh ja lataa se taulukkoon crs. Solualue viittaa taulukon soluryhmään sijainnin perusteella.

Huomaa, että argumentit, 0, 0 (sarake 0, rivi 0) tarkoittavat alueen aloitussolua ja 3, 0 (sarake 3, rivi 0) ilmaisevat alueen loppusolun. Täten 0, 0, 3, 0 viittaa näytesivumme ensimmäiseen (otsikon) riviin.

for i = 1 - 5 x = 1 prof = sh.GetCellByPosition(3, i) rem Tallenna koko rivi muuttujaan If prof.string = "Writer" Sitten crs(j) = sh.getCellRangeByPosition(0, i, 3, i ) j = j + 1 Loppu Jos seuraava i

Käytämme a varten lauseke rivien läpi. The varten lohko päättyy kirjaimeen a Seuraava lauseke, joka kasvattaa muuttujaa i jokaisen iteraation lopussa.

Seuraavaksi kutsumme funktiota GetCellByPosition objektista sh. Ohjaamme parametrit (3, i), eli jokaisella iteraatiolla sarakkeen 3 ja rivin i solun objekti noudetaan muuttujassa prof.

Sitten käytämme an Jos lauseke tarkistaaksesi, onko solun prof arvo "Writer". Jos on, kutsumme funktiota uudelleen getCellRangeByPosition, tällä kertaa, kanssa i rivin aloitus- ja loppunumeron sijaan. Jälleen tallennamme sen taulukkoon crs.

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

Ensin luomme uuden arkin nimellä kirjailijat, asemassa 1, joka on 2. paikka, koska indeksi alkaa 0:sta. Sitten saamme tämän äskettäin luodun arkin objektin, jotta voimme syöttää kirjoittajien tiedot tälle arkille.

i = 0 Tee vaikka ei IsNull(crs(i)) sh2range = sh2.getCellRangeByPosition(0, i, 3, i) sh2range.setDataArray(crs(i).getDataArray) i = i + 1 Loop

The Tehdä, kun loop-lausetta käytetään, kun haluamme silmukan perustua ehtoihin, toisin kuin silmukoita kokonaislukuarvojen alueella, jota varten käytä varten kuten aiemmin esitettiin. Tässä kierretään asti crs(i) ei ole tyhjä.

Seuraavaksi soitetaan uudestaan getCellRangeByPosition samalla tavalla kuin ennenkin saadaksesi alueobjektin uuteen taulukkoon.

Lopuksi kutsumme kahta funktiota: getDataArray joka palauttaa tiedot crs(i), eli yksi tietorivi (kirjoittajasta) ensimmäiseltä arkilta; ja kirjoitamme nämä tiedot solualueelle uudelle taulukolle käyttämällä setDataArray.

Tallenna lopuksi makro kohteesta Tiedosto » Tallenna kaikki vaihtoehto.

Suorita makro siirtymällä kohtaan Työkalut » Makrot » Suorita makro ja valitse makrosi Macro Selector Libraryn "Omat makrot" -hakemistosta. Klikkaa Juosta -painiketta, kun olet valinnut makron nimen.

Yllä olevan makron suorittaminen esimerkkilaskentataulukossamme tuottaa seuraavan tuloksen.

Tämä on tapa luoda makroja LibreOfficessa. Lisätietoja ja vaihtoehtoja on virallisissa asiakirjoissa.

? Kippis!